govmomi perfmanager возвращает имя хранилища данных - PullRequest
0 голосов
/ 04 августа 2020

Используются следующие примеры / perfmanager / main. go для получения показателей для виртуальной машины, такие как следующий datastore.write.average , который успешно возвращает такие значения как показано ниже, имя (имя виртуальной машины), экземпляр (52021f65-c9367fc0-51ce-6c3be5b63f98), v.Name (datastore.write.average), v.ValueCSV (), единицы (КБ / с).

Но Я не могу понять, как вернуть имя хранилища данных, связанное с этими значениями?

Приветствуется любая помощь, включая код, который я использую.

c := client.Client

mgr := view.NewManager(c)

v, err := mgr.CreateContainerView(ctx, c.ServiceContent.RootFolder, nil, true)

if err != nil {
    return errors.Wrap(err, "error in CreateContainerView")
}

defer func() {if err := v.Destroy(ctx); err != nil {m.Logger().Debug(errors.Wrap(err, "error trying to destroy view from vshphere"))}}()

vmsRefs, err := v.Find(ctx, []string{"VirtualMachine"}, nil)

if err != nil {
    return errors.Wrap(err, "error in Retrieve ")
}

perfManager := performance.NewManager(c)

counters, err := perfManager.CounterInfoByName(ctx)

if err != nil {
    return errors.Wrap(err, "error in Retrieve")
}

var names []string
    
names = append(names, "datastore.write.average")

spec := types.PerfQuerySpec{
    MaxSample: 1,
    MetricId: []types.PerfMetricId{{Instance: "*"}},
    IntervalId: 20,
}

sample, err := perfManager.SampleByName(ctx, spec, names, vmsRefs)

if err != nil {
     return errors.Wrap(err, "error in Retrieve")
}

result, err := perfManager.ToMetricSeries(ctx, sample)

if err != nil {
   return errors.Wrap(err, "error in Retrieve")
}

for _, metric := range result{
    
    name := metric.Entity

     for _, v := range metric.Value{
    
    counter := counters[v.Name]
    units := counter.UnitInfo.GetElementDescription().Label

    instance := v.Instance

    if instance == ""{
        instance = "-"
    }

        if len(v.Value) != 0 {
        fmt.Printf("%s\t%s\t%s\t%s\t%s\n",
            name, instance, v.Name, v.ValueCSV(), units)
    }
}
...