chore(cleanup): replace rperfManager and others #266

Closed
opened 2026-03-28 04:22:54 +00:00 by mfreeman451 · 1 comment
Owner

Imported from GitHub.

Original GitHub issue: #760
Original author: @mfreeman451
Original URL: https://github.com/carverauto/serviceradar/issues/760
Original created: 2025-05-12T03:40:02Z


To address interface pollution, consider refactoring the existing managers (metricsManager, snmpManager, rperfManager) to use the QueryExecutor interface where possible. For example:

MetricsManager: Instead of a separate GetMetrics method, execute metrics queries via ExecuteQuery with predefined SQL queries.
SNMPManager and RperfManager: Similarly, convert their data retrieval methods to use ExecuteQuery with appropriate queries.

// pkg/metrics/manager.go

type Manager struct {
    queryExecutor db.QueryExecutor
}

func NewManager(config models.MetricsConfig, qe db.QueryExecutor) *Manager {
    return &Manager{
        queryExecutor: qe,
    }
}

func (m *Manager) GetMetrics(pollerID string) ([]models.MetricPoint, error) {
    query := "SELECT timestamp, value, name FROM metrics WHERE poller_id = $1 AND _tp_time > earliest_ts() ORDER BY timestamp"
    results, err := m.queryExecutor.ExecuteQuery(context.Background(), query, pollerID)
    if err != nil {
        return nil, fmt.Errorf("failed to get metrics: %w", err)
    }

    var points []models.MetricPoint
    for _, row := range results {
        timestamp, _ := row["timestamp"].(time.Time)
        value, _ := row["value"].(float64)
        name, _ := row["name"].(string)
        points = append(points, models.MetricPoint{
            Timestamp: timestamp,
            Value:     value,
            Name:      name,
        })
    }
    return points, nil
}
Imported from GitHub. Original GitHub issue: #760 Original author: @mfreeman451 Original URL: https://github.com/carverauto/serviceradar/issues/760 Original created: 2025-05-12T03:40:02Z --- To address interface pollution, consider refactoring the existing managers (metricsManager, snmpManager, rperfManager) to use the QueryExecutor interface where possible. For example: MetricsManager: Instead of a separate GetMetrics method, execute metrics queries via ExecuteQuery with predefined SQL queries. SNMPManager and RperfManager: Similarly, convert their data retrieval methods to use ExecuteQuery with appropriate queries. ```go // pkg/metrics/manager.go type Manager struct { queryExecutor db.QueryExecutor } func NewManager(config models.MetricsConfig, qe db.QueryExecutor) *Manager { return &Manager{ queryExecutor: qe, } } func (m *Manager) GetMetrics(pollerID string) ([]models.MetricPoint, error) { query := "SELECT timestamp, value, name FROM metrics WHERE poller_id = $1 AND _tp_time > earliest_ts() ORDER BY timestamp" results, err := m.queryExecutor.ExecuteQuery(context.Background(), query, pollerID) if err != nil { return nil, fmt.Errorf("failed to get metrics: %w", err) } var points []models.MetricPoint for _, row := range results { timestamp, _ := row["timestamp"].(time.Time) value, _ := row["value"].(float64) name, _ := row["name"].(string) points = append(points, models.MetricPoint{ Timestamp: timestamp, Value: value, Name: name, }) } return points, nil } ```
Author
Owner

Imported GitHub comment.

Original author: @mfreeman451
Original URL: https://github.com/carverauto/serviceradar/issues/760#issuecomment-3814021768
Original created: 2026-01-28T21:27:20Z


closing, stale

Imported GitHub comment. Original author: @mfreeman451 Original URL: https://github.com/carverauto/serviceradar/issues/760#issuecomment-3814021768 Original created: 2026-01-28T21:27:20Z --- closing, stale
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
carverauto/serviceradar#266
No description provided.