github.com/tickoalcantara12/micro/v3@v3.0.0-20221007104245-9d75b9bcbab9/cmd/usage/client/main.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "io/ioutil" 7 "net/http" 8 "os" 9 "sort" 10 "strings" 11 ) 12 13 type Result struct { 14 Count map[string]int64 `json:"count"` 15 } 16 17 func printKey(k string, v int64) { 18 if v == 0 { 19 return 20 } 21 22 var u string 23 var c float64 24 25 switch { 26 case v > 1e9: 27 c = float64(v) / 1e9 28 u = "b" 29 case v > 1e6: 30 c = float64(v) / 1e6 31 u = "m" 32 case v > 1e4: 33 c = float64(v) / 1e3 34 u = "k" 35 default: 36 c = float64(v) 37 } 38 39 fmt.Printf("micro %s:\t%.2f%s\n", k, c, u) 40 } 41 42 func years() [][]byte { 43 var years [][]byte 44 45 for _, year := range []string{"2019", "2020", "2021"} { 46 rsp, err := http.Get("https://go.micro.mu/usage?date=" + year) 47 if err != nil { 48 fmt.Println(err) 49 return nil 50 } 51 defer rsp.Body.Close() 52 53 b, err := ioutil.ReadAll(rsp.Body) 54 if err != nil { 55 fmt.Println(err) 56 return nil 57 } 58 59 years = append(years, b) 60 } 61 62 return years 63 } 64 65 func main() { 66 var cKey string 67 if len(os.Args) > 1 { 68 cKey = os.Args[1] 69 } 70 71 var results map[string]Result 72 73 counts := map[string]int64{} 74 highest := map[string]int64{} 75 // daily := map[string]int64{} 76 monthly := map[string]int64{} 77 78 // get all the results 79 for _, year := range years() { 80 var res map[string]Result 81 82 if err := json.Unmarshal(year, &results); err != nil { 83 fmt.Println(err) 84 return 85 } 86 87 for k, v := range res { 88 results[k] = v 89 } 90 } 91 92 for k, v := range results { 93 // 20190520-micro.new 94 parts := strings.Split(k, ".") 95 if len(parts) < 2 { 96 continue 97 } 98 99 // micro.new 100 key := parts[len(parts)-1] 101 102 if len(cKey) > 0 && key != cKey { 103 continue 104 } 105 106 // counts[micro.new] += requests 107 c := counts[key] 108 c += v.Count["requests"] 109 // save 110 counts[key] = c 111 112 // set highest 113 if i := highest[key]; v.Count["requests"] > i { 114 highest[key] = v.Count["requests"] 115 } 116 117 // set monthly 118 month := parts[0][:6] 119 mkey := key + " (" + month + ")" 120 c = monthly[mkey] 121 c += v.Count["requests"] 122 monthly[mkey] = c 123 } 124 125 fmt.Println("Total requests:") 126 127 for k, v := range counts { 128 printKey(k, v) 129 } 130 131 fmt.Println("\nHighest requests:") 132 133 for k, v := range highest { 134 printKey(k, v) 135 } 136 137 fmt.Println("\nMonthly requests:") 138 var keys []string 139 for k, _ := range monthly { 140 keys = append(keys, k) 141 } 142 143 sort.Strings(keys) 144 145 for _, k := range keys { 146 printKey(k, monthly[k]) 147 } 148 }