in internal/plugin/manager/pluginmanager.go [326:374]
func (m *PluginManager) ListPluginStates(ctx context.Context, req *acpb.ListPluginStates) *acpb.CurrentPluginStates {
galog.Debugf("Handling list plugin state request: %+v", req)
var states []*acpb.CurrentPluginStates_DaemonPluginState
plugins := m.list()
for _, p := range plugins {
status := &acpb.CurrentPluginStates_DaemonPluginState_Status{Status: p.State()}
h := p.healthInfo()
if h != nil {
status.ResponseCode = h.responseCode
status.Results = h.messages
status.UpdateTime = tpb.New(h.timestamp)
}
p.RuntimeInfo.metricsMu.Lock()
var pluginMetrics []*acpb.CurrentPluginStates_DaemonPluginState_Metric
for _, metric := range p.RuntimeInfo.metrics.All() {
monitorMetric := &acpb.CurrentPluginStates_DaemonPluginState_Metric{
Timestamp: metric.timestamp,
CpuUsage: metric.cpuUsage,
MemoryUsage: metric.memoryUsage,
}
pluginMetrics = append(pluginMetrics, monitorMetric)
}
state := &acpb.CurrentPluginStates_DaemonPluginState{
Name: p.Name,
CurrentRevisionId: p.Revision,
CurrentPluginStatus: status,
CurrentPluginMetrics: pluginMetrics,
}
pendingStatus := p.pendingStatus()
if pendingStatus != nil {
state.PendingRevisionId = pendingStatus.revision
}
// Flush the metrics array.
p.RuntimeInfo.metrics.Reset()
// Release the metrics lock.
p.RuntimeInfo.metricsMu.Unlock()
// Append the state to the list.
states = append(states, state)
}
return &acpb.CurrentPluginStates{DaemonPluginStates: states}
}