Skip to content

Conversation

@ftalpo
Copy link
Collaborator

@ftalpo ftalpo commented Jul 23, 2025

In questo branch ho fatto un refactor della logica, per renderla "ad oggetti" (tra molte virgolette).

Ora il codice di NvmeCollector, definito in /pkg/collector.go è agnostico rispetto ai dettagli di tutte le metriche definite.

Per ogni metrica viene istanziato un oggetto MetricProvider (InfoMetricProvider o LogMetricProvider, definiti in /pkg/provider.go), a cui viene delegata l'estrazione del valore dai JSON e la costruzione della corrispettiva prometheus.Metric.

In questo modo il collector non deve sapere nulla dei dettagli di ciascuna metrica: i metodi Collect e Describe ora iterano sulle liste dei MetricProvider, nel caso di Collect delegando a questi ultimi il fetching della metrica dai log JSON.

L'oggetto NvmeCollector usato in main.go ora viene istanziato in /cmd/collector.go.

Vantaggi: il codice "core" sotto /pkg non deve sapere nulla delle implementazioni di ogni metrica, quindi per aggiungere/rimuovere una metrica basterà editare /cmd/collector.go, senza toccare le definizioni dei metodi di NvmeCollector. Tutte le info per la definizione delle metriche sono centralizzate in /cmd/collector.go (nome, help string, JSON key)

Svantaggi: il codice è meno lineare, e bisogna saltare tra 2-3 file per capire cosa succede.

ftalpo added 4 commits July 18, 2025 16:54
- implement a OOP structure with MetricProvider objects that return prometheus Metrics from the json log result

- implement an agnostic NvmeCollector that stores MetricProviders instances and delegates handling the details of Collect and Describe to them

- move NvmeCollector instantiation in a convenience function in the main package
@ftalpo ftalpo requested a review from LemonySnippet as a code owner July 23, 2025 14:26
@ftalpo
Copy link
Collaborator Author

ftalpo commented Jul 23, 2025

@dobbi84 questa la PR

@ftalpo ftalpo force-pushed the ftalpo/oop_refactor branch from 55af85e to 9ec9ca9 Compare July 23, 2025 15:23
return fmt.Errorf("NVMe cli version not supported, supported versions are: %v", _supportedVersions)
}

shell := utils.NewShell(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Preferirei rimanere su exec.Command ed evitare shell quando possibile

}

return &pkg.NvmeCollector{
OcpEnabled: ocpEnabled,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

non dovremmo internalizzare OcpEnabled in OcpMetricProvider?

ch <- logProvider.Desc
}

for _, ocpLogProvider := range c.OcpLogMetricProviders {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dovremmo eseguirlo solo se ocp flag e' settata

// getDevices queries the devices list through the shell
// and returns an array of JSON results with the devices data.
func (c *NvmeCollector) getDevices() []gjson.Result {
shell := utils.NewShell(utils.WithValidators(gjson.Valid))
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

anche qua preferirei mantenere command invece che shell

// sendOcpSmartLogMetrics queries the shell for ocp smart-log data,
// gets the metrics from each OcpLogMetricProvider in c.OcpLogMetricProviders
// and sends them through the channel.
func (c *NvmeCollector) sendOcpSmartLogMetrics(ch chan<- prometheus.Metric, device gjson.Result) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

sembra molto codice duplicato con sendSMartLogMetrics

@ftalpo ftalpo closed this Jul 28, 2025
@ftalpo
Copy link
Collaborator Author

ftalpo commented Jul 28, 2025

Chiudo per duplicazione con nuovo push su ftalpo/oop_refactor nel main repo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants