mirror of https://github.com/grafana/grafana.git
				
				
				
			
		
			
	
	
		
			42 lines
		
	
	
		
			920 B
		
	
	
	
		
			Go
		
	
	
	
		
		
			
		
	
	
			42 lines
		
	
	
		
			920 B
		
	
	
	
		
			Go
		
	
	
	
|  | package main | ||
|  | 
 | ||
|  | import ( | ||
|  | 	"encoding/json" | ||
|  | 	"fmt" | ||
|  | 	"io" | ||
|  | 	"log" | ||
|  | 	"os" | ||
|  | 	"regexp" | ||
|  | 
 | ||
|  | 	"github.com/grafana/grafana/pkg/build/metrics" | ||
|  | 	"github.com/urfave/cli/v2" | ||
|  | ) | ||
|  | 
 | ||
|  | func PublishMetrics(c *cli.Context) error { | ||
|  | 	apiKey := c.Args().Get(0) | ||
|  | 
 | ||
|  | 	input, err := io.ReadAll(os.Stdin) | ||
|  | 	if err != nil { | ||
|  | 		return cli.NewExitError(fmt.Sprintf("Reading from stdin failed: %s", err), 1) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	reMetrics := regexp.MustCompile(`(?ms)^Metrics: (\{.+\})`) | ||
|  | 	ms := reMetrics.FindSubmatch(input) | ||
|  | 	if len(ms) == 0 { | ||
|  | 		return cli.NewExitError(fmt.Sprintf("Input on wrong format: %q", string(input)), 1) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	m := map[string]string{} | ||
|  | 	if err := json.Unmarshal(ms[1], &m); err != nil { | ||
|  | 		return cli.NewExitError(fmt.Sprintf("decoding metrics failed: %s", err), 1) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	log.Printf("Received metrics %+v", m) | ||
|  | 
 | ||
|  | 	if err := metrics.Publish(m, apiKey); err != nil { | ||
|  | 		return cli.NewExitError(fmt.Sprintf("publishing metrics failed: %s", err), 1) | ||
|  | 	} | ||
|  | 
 | ||
|  | 	return nil | ||
|  | } |