Skip to content

Commit 1951fea

Browse files
Chan fix (#6)
* local mereg * chan-fix: local commitc * chan-fix: Channels added * chan-fix: redundant lib imports * chan-fix: fix log message * chan-fix: Fix log messages
1 parent f12d79a commit 1951fea

File tree

2 files changed

+55
-42
lines changed

2 files changed

+55
-42
lines changed

cmd/prometheus.go

+32
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ import (
66
"io/ioutil"
77
"net/http"
88
"os/exec"
9+
"strings"
910

1011
"github.com/rs/zerolog/log"
1112
)
1213

1314
type Prometheus interface {
1415
FetchPrometheusData(url string) (int, map[string]interface{})
1516
ImportPrometheusData(file, targetDir string) error
17+
ParsePrometheusMetric(ch chan interface{})
1618
ExecutePromtoolCommand(sourceDir, targetDir string) (string, error)
1719
}
1820

@@ -61,3 +63,33 @@ func (promHandler *PromHandler) ExecutePromtoolCommand(sourceDir, targetDir stri
6163
}
6264
return string(output), err
6365
}
66+
67+
func (promHandler *PromHandler) ParsePrometheusMetric(ch chan interface{}) {
68+
r := <-ch
69+
result, _ := r.(map[string]interface{})
70+
71+
labelMap := []string{}
72+
metric, ok := result["metric"].(map[string]interface{})
73+
metricName, ok := metric["__name__"].(string)
74+
if ok {
75+
for key, value := range metric {
76+
if key != "__name__" {
77+
labelMap = append(labelMap, fmt.Sprintf(`%s="%s"`, key, value))
78+
}
79+
}
80+
query := fmt.Sprintf(`%s{%s}`, metricName, strings.Join(labelMap, ","))
81+
82+
values, ok := result["values"].([]interface{})
83+
if ok {
84+
for _, v := range values {
85+
valArr, ok := v.([]interface{})
86+
if ok && len(valArr) == 2 {
87+
tmpData := map[string]interface{}{"mt": fmt.Sprintf("%s %v %f", query, valArr[1], valArr[0])}
88+
ch <- tmpData
89+
}
90+
}
91+
}
92+
close(ch)
93+
}
94+
95+
}

main.go

+23-42
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,15 @@ import (
1414
)
1515

1616
var (
17-
promHost string
18-
promPort string
19-
startStamp string
20-
endStamp string
21-
query string
22-
step string
23-
dataDir string
24-
importstatus bool
25-
targetDir string
26-
metricType string
17+
promHost string
18+
promPort string
19+
startStamp string
20+
endStamp string
21+
query string
22+
step string
23+
dataDir string
24+
targetDir string
25+
metricType string
2726
)
2827

2928
func newPrometheusHandler(host string) prom.Prometheus {
@@ -33,6 +32,7 @@ func newPrometheusHandler(host string) prom.Prometheus {
3332
func CallPrometheus() {
3433

3534
var promHandler prom.Prometheus
35+
3636
promHandler = newPrometheusHandler(promHost)
3737
rawMetricData := []string{}
3838

@@ -65,40 +65,20 @@ func CallPrometheus() {
6565
return
6666
}
6767

68+
ch := make(chan interface{}, len(results))
6869
for _, r := range results {
69-
70-
result, ok := r.(map[string]interface{})
71-
if !ok {
72-
continue
73-
}
74-
75-
labelMap := []string{}
76-
metric, ok := result["metric"].(map[string]interface{})
77-
if !ok {
78-
continue
79-
}
80-
metricName, ok := metric["__name__"].(string)
81-
if ok {
82-
for key, value := range metric {
83-
84-
if key != "__name__" {
85-
labelMap = append(labelMap, fmt.Sprintf(`%s="%s"`, key, value))
86-
}
87-
}
88-
query := fmt.Sprintf(`%s{%s}`, metricName, strings.Join(labelMap, ","))
89-
90-
values, ok := result["values"].([]interface{})
91-
if ok {
92-
for _, v := range values {
93-
valArr, ok := v.([]interface{})
94-
if ok && len(valArr) == 2 {
95-
tmpData := fmt.Sprintf("%s %v %f", query, valArr[1], valArr[0])
96-
rawMetricData = append(rawMetricData, tmpData)
97-
}
98-
}
99-
}
70+
ch <- r
71+
go promHandler.ParsePrometheusMetric(ch)
72+
}
73+
lengthOfMigration := 0
74+
for val := range ch {
75+
msg := val.(map[string]interface{})
76+
tmpData := fmt.Sprintf("%v", msg["mt"])
77+
lengthOfMigration = lengthOfMigration + len(tmpData)
78+
log.Info().Msgf("Size of migrated chunks:: %d", lengthOfMigration)
79+
if msg["mt"] != nil {
80+
rawMetricData = append(rawMetricData, tmpData)
10081
}
101-
10282
}
10383
rawMetricData = append(rawMetricData, "# EOF")
10484

@@ -116,6 +96,7 @@ func CallPrometheus() {
11696
}
11797

11898
func main() {
99+
119100
var rootCmd = &cobra.Command{
120101
Use: "openmetricmigrator",
121102
Short: "CLI tool to export Prometheus data in OpenMetrics format",

0 commit comments

Comments
 (0)