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 }