File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -68,6 +68,12 @@ const METRICS_PROMETHEUS_PUSHGATEWAY_HOST = "metrics.prometheus.pushgateway.host
6868// Interval (in seconds) for metrics retriever
6969const METRICS_RETRIEVER_INTERVAL = "metrics.retriever.interval"
7070
71+ // Filename to dump retrieved metrics as JSON
72+ const METRICS_DUMP_JSON_FILE = "metrics.dump.json.file"
73+
74+ // Filename to load metrics from JSON
75+ const METRICS_LOAD_JSON_FILE = "metrics.load.json.file"
76+
7177// Scheduling policy to use
7278// Possible values: "qosaware", "default", "cloudonly"
7379const SCHEDULING_POLICY = "scheduler.policy"
Original file line number Diff line number Diff line change 11package metrics
22
33import (
4+ "encoding/json"
45 "fmt"
56 "github.com/prometheus/client_golang/prometheus/push"
67 "log"
8+ "os"
79 "time"
810
911 "net/http"
@@ -134,7 +136,29 @@ func Init() {
134136
135137 }
136138
137- go MetricsRetriever ()
139+ jsonMetricsToLoad := config .GetString (config .METRICS_LOAD_JSON_FILE , "" )
140+ if jsonMetricsToLoad == "" {
141+ go MetricsRetriever ()
142+ } else {
143+ log .Println ("Disabling metrics retriever and loading metrics from:" , jsonMetricsToLoad )
144+ err := loadMetricsFromJSON (jsonMetricsToLoad )
145+ if err != nil {
146+ log .Printf ("Error loading metrics: %v\n " , err )
147+ }
148+ log .Println (retrievedMetrics )
149+ }
150+ }
151+
152+ func loadMetricsFromJSON (filename string ) error {
153+ file , err := os .Open (filename )
154+ if err != nil {
155+ return err
156+ }
157+ defer file .Close ()
158+
159+ decoder := json .NewDecoder (file )
160+ err = decoder .Decode (& retrievedMetrics )
161+ return err
138162}
139163
140164func AddCompletedInvocation (funcName string , coldStart bool ) {
Original file line number Diff line number Diff line change @@ -2,9 +2,11 @@ package metrics
22
33import (
44 "context"
5+ "encoding/json"
56 "fmt"
67 "github.com/serverledge-faas/serverledge/internal/registration"
78 "log"
9+ "os"
810 "time"
911
1012 "github.com/prometheus/common/model"
@@ -231,8 +233,24 @@ func MetricsRetriever() {
231233 retrievedMetrics .AvgRemoteInitTime = make (map [string ]float64 )
232234 }
233235
234- fmt .Println ("All queries completed" )
235236 fmt .Println (retrievedMetrics )
237+
238+ // TODO: configuration option
239+ metricsJsonFilename := config .GetString (config .METRICS_DUMP_JSON_FILE , "" )
240+ if metricsJsonFilename != "" {
241+ file , err := os .Create (metricsJsonFilename )
242+ if err != nil {
243+ log .Printf ("Error in serializing metrics: %v" , err )
244+ } else {
245+ encoder := json .NewEncoder (file )
246+ encoder .SetIndent ("" , " " ) // Optional: for pretty printing
247+ err = encoder .Encode (retrievedMetrics )
248+ if err != nil {
249+ log .Printf ("Error in writing metrics to file: %v" , err )
250+ }
251+ file .Close ()
252+ }
253+ }
236254 }
237255 }
238256
Original file line number Diff line number Diff line change 11#! /bin/sh
2- docker run -d -p 9091:9091 --name pushgateway prom/pushgateway
2+ docker run --rm - d -p 9091:9091 --name pushgateway prom/pushgateway
You can’t perform that action at this time.
0 commit comments