I've a go application that gets run periodically by a batch. Each run, it should read some prometheus metrics from a file, run its logic, update a success/fail counter, and write metrics back out to a file.
From looking at How to parse Prometheus data as well as the godocs for prometheus, I'm able to read in the file, but I don't know how to update app_processed_total with the value returned by expfmt.ExtractSamples().
This is what I've done so far. Could someone please tell me how should I proceed from here? How can I typecast the Vector I got into a CounterVec?
package main
import (
    "fmt"
    "net/http"
    "strings"
    "time"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
    dto "github.com/prometheus/client_model/go"
    "github.com/prometheus/common/expfmt"
    "github.com/prometheus/common/model"
)
var (
    fileOnDisk     = prometheus.NewRegistry()
    processedTotal = prometheus.NewCounterVec(prometheus.CounterOpts{
        Name: "app_processed_total",
        Help: "Number of times ran",
    }, []string{"status"})
)
func doInit() {
    prometheus.MustRegister(processedTotal)
}
func recordMetrics() {
    go func() {
        for {
            processedTotal.With(prometheus.Labels{"status": "ok"}).Inc()
            time.Sleep(5 * time.Second)
        }
    }()
}
func readExistingMetrics() {
    var parser expfmt.TextParser
    text := `
# HELP app_processed_total Number of times ran
# TYPE app_processed_total counter
app_processed_total{status="ok"} 300
`
    parseText := func() ([]*dto.MetricFamily, error) {
        parsed, err := parser.TextToMetricFamilies(strings.NewReader(text))
        if err != nil {
            return nil, err
        }
        var result []*dto.MetricFamily
        for _, mf := range parsed {
            result = append(result, mf)
        }
        return result, nil
    }
    gatherers := prometheus.Gatherers{
        fileOnDisk,
        prometheus.GathererFunc(parseText),
    }
    gathering, err := gatherers.Gather()
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println("gathering: ", gathering)
    for _, g := range gathering {
        vector, err := expfmt.ExtractSamples(&expfmt.DecodeOptions{
            Timestamp: model.Now(),
        }, g)
        fmt.Println("vector: ", vector)
        if err != nil {
            fmt.Println(err)
        }
        // How can I update processedTotal with this new value?
    }
}
func main() {
    doInit()
    readExistingMetrics()
    recordMetrics()
    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe("localhost:2112", nil)
}
 
    