github.com/grafana/synthetic-monitoring-agent@v0.64.2/cmd/synthetic-monitoring-proto/main.go (about)

     1  package main
     2  
     3  import (
     4  	"encoding/json"
     5  	"flag"
     6  	"fmt"
     7  	"io"
     8  	"log"
     9  	"os"
    10  
    11  	sm "github.com/grafana/synthetic-monitoring-agent/pkg/pb/synthetic_monitoring"
    12  )
    13  
    14  type checkType int
    15  
    16  const (
    17  	CHECK_PING checkType = iota
    18  	CHECK_HTTP
    19  	CHECK_DNS
    20  )
    21  
    22  func main() {
    23  	doWritePing := flag.Bool("write-ping", false, "write example ping document")
    24  	doWriteHttp := flag.Bool("write-http", false, "write example http document")
    25  	doWriteDns := flag.Bool("write-dns", false, "write example dns document")
    26  
    27  	flag.Parse()
    28  
    29  	switch {
    30  	case *doWritePing:
    31  		write(CHECK_PING)
    32  	case *doWriteHttp:
    33  		write(CHECK_HTTP)
    34  	case *doWriteDns:
    35  		write(CHECK_DNS)
    36  	default:
    37  		read()
    38  	}
    39  }
    40  
    41  func read() {
    42  	input, err := io.ReadAll(os.Stdin)
    43  	if err != nil {
    44  		log.Printf("E: Cannot read input: %s", err)
    45  		os.Exit(1)
    46  	}
    47  
    48  	var check sm.Check
    49  
    50  	if err := json.Unmarshal(input, &check); err != nil {
    51  		log.Printf("E: Cannot unmarshal input: %s", err)
    52  		os.Exit(1)
    53  	}
    54  
    55  	if err := check.Validate(); err != nil {
    56  		log.Printf("Input is invalid: %s", err)
    57  		return
    58  	}
    59  
    60  	log.Println("Input is valid")
    61  }
    62  
    63  func write(checkType checkType) {
    64  	var (
    65  		settings sm.CheckSettings
    66  		target   string
    67  	)
    68  
    69  	switch checkType {
    70  	case CHECK_PING:
    71  		target = "grafana.com"
    72  		settings = sm.CheckSettings{
    73  			Ping: &sm.PingSettings{
    74  				IpVersion: sm.IpVersion_V4,
    75  			},
    76  		}
    77  
    78  	case CHECK_HTTP:
    79  		target = "https://grafana.com/"
    80  		settings = sm.CheckSettings{
    81  			Http: &sm.HttpSettings{
    82  				Method:       sm.HttpMethod_GET,
    83  				IpVersion:    sm.IpVersion_V4,
    84  				FailIfNotSSL: true,
    85  			},
    86  		}
    87  
    88  	case CHECK_DNS:
    89  		target = "grafana.com"
    90  		settings = sm.CheckSettings{
    91  			Dns: &sm.DnsSettings{
    92  				RecordType: sm.DnsRecordType_A,
    93  				Server:     "8.8.4.4",
    94  				IpVersion:  sm.IpVersion_V4,
    95  				Protocol:   sm.DnsProtocol_TCP,
    96  				Port:       53,
    97  			},
    98  		}
    99  	}
   100  
   101  	check := sm.Check{
   102  		Id:        123,
   103  		TenantId:  27172,
   104  		Frequency: 5000,
   105  		Offset:    2300,
   106  		Timeout:   2500,
   107  		Enabled:   true,
   108  		Labels:    []sm.Label{{Name: "environment", Value: "production"}},
   109  		Target:    target,
   110  		Settings:  settings,
   111  	}
   112  
   113  	if err := check.Validate(); err != nil {
   114  		log.Printf("Invalid check: %s", err)
   115  		return
   116  	}
   117  
   118  	out, err := json.Marshal(&check)
   119  	if err != nil {
   120  		fmt.Println(err)
   121  	}
   122  
   123  	fmt.Println(string(out))
   124  }