Untitled Paste

go
Wrap Lines
Raw
package main

import (
	"bytes"
	"fmt"
	"io"
	"log"
	"net/http"
	"time"

	"github.com/golang/snappy"
	"github.com/prometheus/prometheus/prompb"
)

const (
	remoteWriteURL = "https://prom.scanwizard.ru/api/v1/write"
	username       = "scanaryd"
	password       = "$apr1$RseemMSV$H2LzM3cl71lbptrokMhgF/"
)

func main() {
	writeRequest := &prompb.WriteRequest{
		Timeseries: []prompb.TimeSeries{
			{
				Labels: []prompb.Label{
					{Name: "__name__", Value: "asic_test_metric"},
					{Name: "job", Value: "go-test-script"},
					{Name: "instance", Value: "local-dev"},
				},
				Samples: []prompb.Sample{
					{
						Value:     123.45,
						Timestamp: time.Now().UnixMilli(),
					},
				},
			},
		},
	}

	data, err := writeRequest.Marshal()

	if err != nil {
		log.Fatalf("Failed to marshal protobuf: %v", err)
	}
	compressedData := snappy.Encode(nil, data)

	req, err := http.NewRequest("POST", remoteWriteURL, bytes.NewBuffer(compressedData))
	if err != nil {
		log.Fatalf("Failed to create request: %v", err)
	}

	req.Header.Set("Content-Type", "application/x-protobuf")
	req.Header.Set("Content-Encoding", "snappy")
	req.Header.Set("X-Prometheus-Remote-Write-Version", "0.1.0")

	req.SetBasicAuth(username, password)

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		log.Fatalf("Failed to send request: %v", err)
	}
	defer resp.Body.Close()

	responseBody, err := io.ReadAll(resp.Body)
	if err != nil {
		log.Fatalf("Failed to read response body: %v", err)
	}

	fmt.Printf("Response Body: %s\n", string(responseBody))
}