From b293adfacb9b838517c7762783d8831c08d3a3d9 Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Wed, 3 Jun 2026 09:39:40 +0300 Subject: [PATCH 01/12] PMM-14689 Add centralized logging and tracing (OpenTelemetry + ClickHouse) Ship Client and Server logs/traces to a central, queryable store using an OpenTelemetry Collector (contrib) on PMM Server and the existing ClickHouse, queried via Grafana's grafana-clickhouse-datasource. - Collector: new supervised otelcol-contrib program + pmm-managed-rendered /etc/otelcol/config.yaml (filelog of /srv/logs, loopback OTLP receivers, clickhouse exporter, create_schema=false). Ansible role installs the binary. - Schema + TTL owned by pmm-managed (managed/services/clickhouse): pmm.logs / pmm.traces migrations on their own version table, ApplyTTL via ALTER TABLE. qan-api2 is left unaware of logging/tracing. - New LogsRetention setting controls log/trace TTL, applied on ChangeSettings. - Client log shipping over the existing authenticated gRPC channel: new LogShipService/LogShipChannel (mirrors RTAChannel), supervisor LogWriter ships pmm-agent's own logs and all controlled-agent logs; server forwards to the collector via OTLP/HTTP. - Database log-watcher agent (db-log-watcher-agent): tails configured DB log files (rotation-safe, path allowlist) and ships tagged lines. Exposed via pmm-admin add mysql --watch-logs --log-file. - Log-based alerting: alert templates gain a "clickhouse" datasource that builds a 3-node Grafana rule (SQL -> reduce -> threshold); built-in mysql_log_down.yml. - Dedicated ClickHouseLogs Grafana datasource for OTel logs/traces in Explore; the existing ClickHouse datasource is unchanged. Co-Authored-By: Claude Opus 4.8 --- admin/commands/management/add_mysql.go | 5 + agent/agents/agents.go | 4 +- agent/agents/logs/dbwatcher/dbwatcher.go | 226 +++ agent/agents/logs/dbwatcher/dbwatcher_test.go | 86 + agent/agents/supervisor/supervisor.go | 81 +- agent/client/channel/logship_channel.go | 147 ++ agent/client/client.go | 75 +- agent/client/client_test.go | 3 + agent/client/deps.go | 2 + agent/client/mock_supervisor_test.go | 21 + agent/commands/run.go | 8 + agent/config/config.go | 6 + api/agent/v1/agent.pb.go | 357 ++-- api/agent/v1/agent.pb.validate.go | 295 ++-- api/agent/v1/agent.proto | 4 + api/descriptor.bin | Bin 820557 -> 826500 bytes api/inventory/v1/agents.go | 1 + api/inventory/v1/agents.pb.go | 1498 ++++++++++------- api/inventory/v1/agents.pb.validate.go | 571 +++++-- api/inventory/v1/agents.proto | 39 + api/logship/v1/logship.pb.go | 289 ++++ api/logship/v1/logship.pb.validate.go | 406 +++++ api/logship/v1/logship.proto | 41 + api/logship/v1/logship_grpc.pb.go | 120 ++ .../add_service_responses.go | 6 + api/management/v1/mysql.pb.go | 74 +- api/management/v1/mysql.pb.validate.go | 8 +- api/management/v1/mysql.proto | 4 + api/server/v1/server.pb.go | 187 +- api/server/v1/server.pb.validate.go | 138 +- api/server/v1/server.proto | 4 + .../roles/grafana/files/datasources.yml | 28 + build/ansible/roles/otelcol/defaults/main.yml | 7 + build/ansible/roles/otelcol/tasks/main.yml | 30 + build/ansible/roles/pmm-images/tasks/main.yml | 4 + managed/cmd/pmm-managed-init/main.go | 7 + managed/cmd/pmm-managed/main.go | 26 + .../alerting-templates/mysql_log_down.yml | 30 + managed/models/agent_helpers.go | 8 + managed/models/agent_model.go | 22 + managed/models/agent_model_reform.go | 7 +- managed/models/database.go | 7 + managed/models/settings.go | 8 + managed/models/settings_helpers.go | 18 + managed/models/template_helpers.go | 20 +- managed/models/template_model.go | 2 + managed/models/template_model_reform.go | 11 +- managed/pi/alert/template.go | 15 + managed/pi/alert/template_clickhouse_test.go | 50 + managed/services/agents/dblogwatcher.go | 56 + managed/services/agents/state.go | 4 +- managed/services/alert_rule.go | 34 +- managed/services/alerting/deps.go | 1 + .../alerting/mock_grafana_client_test.go | 28 + managed/services/alerting/service.go | 108 +- managed/services/clickhouse/clickhouse.go | 223 +++ .../clickhouse/migrations/sql/1_logs.down.sql | 1 + .../clickhouse/migrations/sql/1_logs.up.sql | 33 + .../migrations/sql/2_traces.down.sql | 1 + .../clickhouse/migrations/sql/2_traces.up.sql | 36 + managed/services/converters.go | 17 + managed/services/grafana/client.go | 14 + .../services/inventory/grpc/agents_server.go | 4 + managed/services/logship/service.go | 208 +++ managed/services/management/mysql.go | 15 + managed/services/server/deps.go | 5 + managed/services/server/server.go | 12 + .../services/supervisord/otelcol_config.go | 147 ++ .../supervisord/otelcol_config_test.go | 49 + managed/services/supervisord/pmm_config.go | 14 + .../supervisord.d/pmm-db_disabled.ini | 14 + .../testdata/supervisord.d/pmm-db_enabled.ini | 14 + 72 files changed, 4727 insertions(+), 1317 deletions(-) create mode 100644 agent/agents/logs/dbwatcher/dbwatcher.go create mode 100644 agent/agents/logs/dbwatcher/dbwatcher_test.go create mode 100644 agent/client/channel/logship_channel.go create mode 100644 api/logship/v1/logship.pb.go create mode 100644 api/logship/v1/logship.pb.validate.go create mode 100644 api/logship/v1/logship.proto create mode 100644 api/logship/v1/logship_grpc.pb.go create mode 100644 build/ansible/roles/otelcol/defaults/main.yml create mode 100644 build/ansible/roles/otelcol/tasks/main.yml create mode 100644 managed/data/alerting-templates/mysql_log_down.yml create mode 100644 managed/pi/alert/template_clickhouse_test.go create mode 100644 managed/services/agents/dblogwatcher.go create mode 100644 managed/services/clickhouse/clickhouse.go create mode 100644 managed/services/clickhouse/migrations/sql/1_logs.down.sql create mode 100644 managed/services/clickhouse/migrations/sql/1_logs.up.sql create mode 100644 managed/services/clickhouse/migrations/sql/2_traces.down.sql create mode 100644 managed/services/clickhouse/migrations/sql/2_traces.up.sql create mode 100644 managed/services/logship/service.go create mode 100644 managed/services/supervisord/otelcol_config.go create mode 100644 managed/services/supervisord/otelcol_config_test.go diff --git a/admin/commands/management/add_mysql.go b/admin/commands/management/add_mysql.go index 25210e9aea2..1bddc9d240c 100644 --- a/admin/commands/management/add_mysql.go +++ b/admin/commands/management/add_mysql.go @@ -122,6 +122,8 @@ type AddMySQLCommand struct { DisableCollectors []string `help:"Comma-separated list of collector names to exclude from exporter"` ExposeExporter bool `name:"expose-exporter" help:"Optionally expose the address of the exporter publicly on 0.0.0.0"` ConnectionTimeout *time.Duration `placeholder:"DURATION" help:"Connection timeout to use for exporter (e.g. 1s, 1.5s)"` + WatchLogs bool `name:"watch-logs" help:"Watch this service's database log files and ship them to PMM Server"` + LogFiles []string `name:"log-file" placeholder:"PATH" help:"Absolute path of a database log file to watch (repeatable)"` AddCommonFlags flags.MetricsModeFlags @@ -229,6 +231,9 @@ func (cmd *AddMySQLCommand) RunCmd() (commands.Result, error) { QANMysqlSlowlog: cmd.QuerySource == MysqlQuerySourceSlowLog, QANMysqlPerfschema: cmd.QuerySource == MysqlQuerySourcePerfSchema, + WatchLogs: cmd.WatchLogs, + LogFiles: cmd.LogFiles, + SkipConnectionCheck: cmd.SkipConnectionCheck, DisableCommentsParsing: !cmd.CommentsParsingEnabled(), MaxQueryLength: cmd.MaxQueryLength, diff --git a/agent/agents/agents.go b/agent/agents/agents.go index 5bf632af90c..ae96d49b6fa 100644 --- a/agent/agents/agents.go +++ b/agent/agents/agents.go @@ -22,14 +22,16 @@ import ( agentv1 "github.com/percona/pmm/api/agent/v1" inventoryv1 "github.com/percona/pmm/api/inventory/v1" + logshipv1 "github.com/percona/pmm/api/logship/v1" rtav1 "github.com/percona/pmm/api/realtimeanalytics/v1" ) -// Change represents built-in Agent status change and/or QAN collect request. +// Change represents built-in Agent status change and/or a QAN/RTA/log collect request. type Change struct { Status inventoryv1.AgentStatus MetricsBucket []*agentv1.MetricsBucket RTAQueriesBucket []*rtav1.QueryData + LogShipRequests []*logshipv1.ShipRequest } // BuiltinAgent is a common interface for all built-in Agents. diff --git a/agent/agents/logs/dbwatcher/dbwatcher.go b/agent/agents/logs/dbwatcher/dbwatcher.go new file mode 100644 index 00000000000..14d86dce459 --- /dev/null +++ b/agent/agents/logs/dbwatcher/dbwatcher.go @@ -0,0 +1,226 @@ +// Copyright (C) 2023 Percona LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package dbwatcher runs a built-in agent that tails database log files and ships their lines to the +// PMM Server over the existing agent channel. Parsing of the raw lines happens centrally on the server. +package dbwatcher + +import ( + "context" + "path/filepath" + "strings" + "sync" + "time" + + "github.com/pkg/errors" + "github.com/prometheus/client_golang/prometheus" + "github.com/sirupsen/logrus" + "google.golang.org/protobuf/types/known/timestamppb" + + "github.com/percona/pmm/agent/agents" + "github.com/percona/pmm/agent/utils/backoff" + "github.com/percona/pmm/agent/utils/filereader" + inventoryv1 "github.com/percona/pmm/api/inventory/v1" + logshipv1 "github.com/percona/pmm/api/logship/v1" +) + +const ( + backoffMinDelay = 1 * time.Second + backoffMaxDelay = 30 * time.Second +) + +// WatchedFile is a single log file to tail and its type. +type WatchedFile struct { + Path string + Type string // error, slow or general +} + +// Params are the database log-watcher agent parameters. +type Params struct { + AgentID string + ServiceID string + ServiceName string + DBSystem string // OTel db.system: mysql, postgresql, ... + Files []WatchedFile + // AllowedDirs restricts which directories may be watched. Empty means only the explicitly + // configured paths are allowed (no additional directories). + AllowedDirs []string +} + +// DBLogWatcher tails configured database log files and ships their lines. +type DBLogWatcher struct { + params *Params + l *logrus.Entry + changes chan agents.Change +} + +// New creates a new database log-watcher agent. +func New(params *Params, l *logrus.Entry) (*DBLogWatcher, error) { + return &DBLogWatcher{ + params: params, + l: l, + changes: make(chan agents.Change, 100), //nolint:mnd + }, nil +} + +// Run tails the configured files until ctx is canceled. +func (s *DBLogWatcher) Run(ctx context.Context) { + defer func() { + s.changes <- agents.Change{Status: inventoryv1.AgentStatus_AGENT_STATUS_DONE} + close(s.changes) + }() + + s.changes <- agents.Change{Status: inventoryv1.AgentStatus_AGENT_STATUS_STARTING} + + var wg sync.WaitGroup + var watched int + for _, f := range s.params.Files { + path, err := s.validatePath(f.Path) + if err != nil { + s.l.Errorf("Refusing to watch %q: %s.", f.Path, err) + continue + } + watched++ + wg.Add(1) + go func(path, logType string) { + defer wg.Done() + s.watchFile(ctx, path, logType) + }(path, f.Type) + } + + if watched == 0 { + s.l.Warn("No valid log files to watch.") + s.changes <- agents.Change{Status: inventoryv1.AgentStatus_AGENT_STATUS_WAITING} + <-ctx.Done() + return + } + + s.changes <- agents.Change{Status: inventoryv1.AgentStatus_AGENT_STATUS_RUNNING} + wg.Wait() +} + +// watchFile tails a single file, reopening it (with backoff) until ctx is canceled. +func (s *DBLogWatcher) watchFile(ctx context.Context, path, logType string) { + b := backoff.New(backoffMinDelay, backoffMaxDelay) + for ctx.Err() == nil { + reader, err := filereader.NewContinuousFileReader(path, s.l) + if err != nil { + s.l.Warnf("Cannot open %q: %s.", path, err) + select { + case <-ctx.Done(): + return + case <-time.After(b.Delay()): + continue + } + } + b.Reset() + s.tail(ctx, reader, logType) + } +} + +// tail reads lines until the reader is closed (on ctx cancellation) and ships each line. +func (s *DBLogWatcher) tail(ctx context.Context, reader *filereader.ContinuousFileReader, logType string) { + done := make(chan struct{}) + go func() { + select { + case <-ctx.Done(): + _ = reader.Close() + case <-done: + } + }() + defer close(done) + + for { + line, err := reader.NextLine() + if err != nil { + return + } + if line = strings.TrimRight(line, "\r\n"); line == "" { + continue + } + s.ship(line, logType) + } +} + +func (s *DBLogWatcher) ship(line, logType string) { + req := &logshipv1.ShipRequest{ + ServiceName: s.params.ServiceName, + ResourceAttributes: map[string]string{ + "db.system": s.params.DBSystem, + "service.id": s.params.ServiceID, + "pmm.source": "client", + "pmm.agent_id": s.params.AgentID, + }, + Records: []*logshipv1.LogRecord{{ + Time: timestamppb.Now(), + Body: line, + Attributes: map[string]string{"pmm.log_type": logType}, + }}, + } + select { + case s.changes <- agents.Change{LogShipRequests: []*logshipv1.ShipRequest{req}}: + default: + // drop under backpressure to never block tailing + } +} + +// validatePath resolves the path and enforces the allowlist, defeating symlink escapes. +func (s *DBLogWatcher) validatePath(p string) (string, error) { + abs, err := filepath.Abs(p) + if err != nil { + return "", err + } + resolved, err := filepath.EvalSymlinks(abs) + if err != nil { + // The file may not exist yet; fall back to the cleaned absolute path for the allowlist check. + resolved = filepath.Clean(abs) + } + + if len(s.params.AllowedDirs) > 0 { + allowed := false + for _, dir := range s.params.AllowedDirs { + if pathWithin(resolved, dir) { + allowed = true + break + } + } + if !allowed { + return "", errors.Errorf("path %q is not within an allowed directory", resolved) + } + } + return resolved, nil +} + +func pathWithin(path, dir string) bool { + dir = filepath.Clean(dir) + rel, err := filepath.Rel(dir, filepath.Clean(path)) + if err != nil { + return false + } + return rel != ".." && !strings.HasPrefix(rel, ".."+string(filepath.Separator)) +} + +// Changes returns the channel of agent changes. +func (s *DBLogWatcher) Changes() <-chan agents.Change { + return s.changes +} + +// Describe implements prometheus.Collector. +func (s *DBLogWatcher) Describe(chan<- *prometheus.Desc) {} + +// Collect implements prometheus.Collector. +func (s *DBLogWatcher) Collect(chan<- prometheus.Metric) {} + +// check interface. +var _ agents.BuiltinAgent = (*DBLogWatcher)(nil) diff --git a/agent/agents/logs/dbwatcher/dbwatcher_test.go b/agent/agents/logs/dbwatcher/dbwatcher_test.go new file mode 100644 index 00000000000..53735746a16 --- /dev/null +++ b/agent/agents/logs/dbwatcher/dbwatcher_test.go @@ -0,0 +1,86 @@ +// Copyright (C) 2023 Percona LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package dbwatcher + +import ( + "context" + "os" + "path/filepath" + "testing" + "time" + + "github.com/sirupsen/logrus" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestDBLogWatcherTailsAndShips(t *testing.T) { + dir := t.TempDir() + logPath := filepath.Join(dir, "error.log") + require.NoError(t, os.WriteFile(logPath, []byte("preexisting line\n"), 0o600)) + + w, err := New(&Params{ + AgentID: "agent-1", + ServiceID: "service-1", + ServiceName: "mysql-svc", + DBSystem: "mysql", + Files: []WatchedFile{{Path: logPath, Type: "error"}}, + }, logrus.WithField("test", t.Name())) + require.NoError(t, err) + + ctx, cancel := context.WithTimeout(t.Context(), 10*time.Second) + defer cancel() + + go w.Run(ctx) + + // The reader seeks to the end on open, so write a new line after starting. + f, err := os.OpenFile(logPath, os.O_APPEND|os.O_WRONLY, 0o600) //nolint:gosec + require.NoError(t, err) + // Give the watcher a moment to open and seek before appending. + time.Sleep(500 * time.Millisecond) + _, err = f.WriteString("2026-06-03T10:00:00Z 0 [ERROR] [MY-010119] [Server] Aborting\n") + require.NoError(t, err) + require.NoError(t, f.Close()) + + for { + select { + case <-ctx.Done(): + t.Fatal("timed out waiting for a shipped log record") + case change := <-w.Changes(): + if len(change.LogShipRequests) == 0 { + continue + } + req := change.LogShipRequests[0] + assert.Equal(t, "mysql-svc", req.ServiceName) + assert.Equal(t, "mysql", req.ResourceAttributes["db.system"]) + assert.Equal(t, "client", req.ResourceAttributes["pmm.source"]) + require.Len(t, req.Records, 1) + assert.Contains(t, req.Records[0].Body, "[ERROR]") + assert.Equal(t, "error", req.Records[0].Attributes["pmm.log_type"]) + return + } + } +} + +func TestDBLogWatcherAllowlistRejectsOutsidePaths(t *testing.T) { + w, err := New(&Params{ + Files: []WatchedFile{{Path: "/etc/shadow", Type: "error"}}, + AllowedDirs: []string{t.TempDir()}, + }, logrus.WithField("test", t.Name())) + require.NoError(t, err) + + _, err = w.validatePath("/etc/shadow") + require.Error(t, err) +} diff --git a/agent/agents/supervisor/supervisor.go b/agent/agents/supervisor/supervisor.go index b7a1e03072e..71966727c72 100644 --- a/agent/agents/supervisor/supervisor.go +++ b/agent/agents/supervisor/supervisor.go @@ -34,6 +34,7 @@ import ( "google.golang.org/protobuf/types/known/timestamppb" "github.com/percona/pmm/agent/agents" + "github.com/percona/pmm/agent/agents/logs/dbwatcher" "github.com/percona/pmm/agent/agents/mongodb/mongolog" mongoprofiler "github.com/percona/pmm/agent/agents/mongodb/profiler" mongorta "github.com/percona/pmm/agent/agents/mongodb/realtimeanalytics" @@ -49,6 +50,7 @@ import ( agentv1 "github.com/percona/pmm/api/agent/v1" agentlocal "github.com/percona/pmm/api/agentlocal/v1" inventoryv1 "github.com/percona/pmm/api/inventory/v1" + logshipv1 "github.com/percona/pmm/api/logship/v1" rtav1 "github.com/percona/pmm/api/realtimeanalytics/v1" ) @@ -56,6 +58,7 @@ const ( changesBufferSize = 100 qanRequestsBufferSize = 100 rtaRequestsBufferSize = 100 + logRequestsBufferSize = 1000 // logs are higher volume than RTA/QAN. ) // configGetter allows for getting a config. @@ -73,6 +76,7 @@ type Supervisor struct { changes chan *agentv1.StateChangedRequest qanRequests chan *agentv1.QANCollectRequest rtaRequests chan *rtav1.CollectRequest + logRequests chan *logshipv1.ShipRequest l *logrus.Entry rw sync.RWMutex @@ -118,6 +122,7 @@ func NewSupervisor(ctx context.Context, av agentVersioner, cfg configGetter) *Su changes: make(chan *agentv1.StateChangedRequest, changesBufferSize), qanRequests: make(chan *agentv1.QANCollectRequest, qanRequestsBufferSize), rtaRequests: make(chan *rtav1.CollectRequest, rtaRequestsBufferSize), + logRequests: make(chan *logshipv1.ShipRequest, logRequestsBufferSize), l: logrus.WithField("component", "supervisor"), agentProcesses: make(map[string]*agentProcessInfo), @@ -229,6 +234,41 @@ func (s *Supervisor) RTARequests() <-chan *rtav1.CollectRequest { return s.rtaRequests } +// LogRequests returns the channel with log records to be shipped to pmm-managed. It must be read until +// it is closed. +func (s *Supervisor) LogRequests() <-chan *logshipv1.ShipRequest { + return s.logRequests +} + +// LogWriter returns an io.Writer that ships every written line to pmm-managed as a log record tagged +// with the given service name and resource attributes. Lines are dropped (never blocking the writer) +// when the buffer is full. It is also used for pmm-agent's own logs (see agent/commands/run.go). +func (s *Supervisor) LogWriter(serviceName string, attrs map[string]string) io.Writer { + return &logShipWriter{serviceName: serviceName, attrs: attrs, ch: s.logRequests} +} + +// logShipWriter forwards each written log line to the supervisor's logRequests channel. +type logShipWriter struct { + serviceName string + attrs map[string]string + ch chan<- *logshipv1.ShipRequest +} + +func (w *logShipWriter) Write(b []byte) (int, error) { + if line := strings.TrimRight(string(b), "\n"); line != "" { + req := &logshipv1.ShipRequest{ + ServiceName: w.serviceName, + ResourceAttributes: w.attrs, + Records: []*logshipv1.LogRecord{{Time: timestamppb.Now(), Body: line}}, + } + select { + case w.ch <- req: + default: // drop to never block agent logging + } + } + return len(b), nil +} + // SetState starts or updates all agents placed in args and stops all agents not placed in args, but already run. func (s *Supervisor) SetState(state *agentv1.SetStateRequest) { // do not process SetState requests concurrently for internal state consistency and implementation simplicity @@ -475,7 +515,7 @@ func (s *Supervisor) startProcess(agentID string, agentProcess *agentv1.SetState ctx, cancel := context.WithCancel(s.ctx) agentType := trimPrefix(agentProcess.Type.String()) logStore := tailog.NewStore(s.cfg.Get().LogLinesCount) - l := s.agentLogger(logStore).WithFields(logrus.Fields{ + l := s.agentLogger(logStore, agentID, agentType).WithFields(logrus.Fields{ "component": "agent-process", "agentID": agentID, "type": agentType, @@ -562,7 +602,7 @@ func (s *Supervisor) startBuiltin(agentID string, builtinAgent *agentv1.SetState ctx, cancel := context.WithCancel(s.ctx) agentType := trimPrefix(builtinAgent.Type.String()) logStore := tailog.NewStore(cfg.LogLinesCount) - l := s.agentLogger(logStore).WithFields(logrus.Fields{ + l := s.agentLogger(logStore, agentID, agentType).WithFields(logrus.Fields{ "component": "agent-builtin", "agentID": agentID, "type": agentType, @@ -660,6 +700,20 @@ func (s *Supervisor) startBuiltin(agentID string, builtinAgent *agentv1.SetState } agent, err = mongorta.New(params, l) + case inventoryv1.AgentType_AGENT_TYPE_DB_LOG_WATCHER_AGENT: + files := make([]dbwatcher.WatchedFile, 0, len(builtinAgent.WatchedLogs)) + for _, wl := range builtinAgent.WatchedLogs { + files = append(files, dbwatcher.WatchedFile{Path: wl.Path, Type: wl.Type}) + } + params := &dbwatcher.Params{ + AgentID: agentID, + ServiceID: builtinAgent.ServiceId, + ServiceName: builtinAgent.ServiceName, + DBSystem: builtinAgent.DbSystem, + Files: files, + } + agent, err = dbwatcher.New(params, l) + case type_TEST_NOOP: agent = noop.New() @@ -712,6 +766,14 @@ func (s *Supervisor) startBuiltin(agentID string, builtinAgent *agentv1.SetState Queries: change.RTAQueriesBucket, } } + + for _, req := range change.LogShipRequests { + // Non-blocking: drop under backpressure so the watcher is never blocked by a slow channel. + select { + case s.logRequests <- req: + default: + } + } } close(done) }() @@ -728,10 +790,18 @@ func (s *Supervisor) startBuiltin(agentID string, builtinAgent *agentv1.SetState return nil } -// agentLogger write logs to Store so can get last N. -func (s *Supervisor) agentLogger(logStore *tailog.Store) *logrus.Logger { +// agentLogger writes logs to Store (so we can get the last N) and, when log shipping is enabled, also +// ships them to pmm-managed tagged with the agent type and id. +func (s *Supervisor) agentLogger(logStore *tailog.Store, agentID, agentType string) *logrus.Logger { + writers := []io.Writer{os.Stderr, logStore} + if s.cfg.Get().LogShip { + writers = append(writers, s.LogWriter(agentType, map[string]string{ + "pmm.agent_id": agentID, + "pmm.source": "client", + })) + } return &logrus.Logger{ - Out: io.MultiWriter(os.Stderr, logStore), + Out: io.MultiWriter(writers...), Hooks: logrus.StandardLogger().Hooks, Formatter: logrus.StandardLogger().Formatter, ReportCaller: logrus.StandardLogger().ReportCaller, @@ -881,6 +951,7 @@ func (s *Supervisor) stopAll() { s.l.Infof("Done.") close(s.qanRequests) close(s.rtaRequests) + close(s.logRequests) close(s.changes) } diff --git a/agent/client/channel/logship_channel.go b/agent/client/channel/logship_channel.go new file mode 100644 index 00000000000..64bff9bcdbf --- /dev/null +++ b/agent/client/channel/logship_channel.go @@ -0,0 +1,147 @@ +// Copyright (C) 2023 Percona LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package channel + +import ( + "fmt" + "sync" + "time" + + "github.com/prometheus/client_golang/prometheus" + "github.com/sirupsen/logrus" + "google.golang.org/grpc/status" + + logshipv1 "github.com/percona/pmm/api/logship/v1" +) + +const ( + logShipPrometheusSubsystem = "logship_channel" +) + +// LogShipChannel encapsulates the client-streaming gRPC stream that ships client/database logs from +// pmm-agent to pmm-managed. It mirrors RTAChannel and shares the same underlying gRPC connection. +// +// All exported methods are thread-safe. +type LogShipChannel struct { + s logshipv1.LogShipService_ShipClient + l *logrus.Entry + + mSend prometheus.Counter + + sendM sync.Mutex + + closeOnce sync.Once + closeWait chan struct{} + closeErr error +} + +// NewLogShipChannel creates a new uni-directional log-shipping channel with the given stream. +// +// Stream should not be used by the caller after channel is created. +func NewLogShipChannel(stream logshipv1.LogShipService_ShipClient) *LogShipChannel { + c := &LogShipChannel{ + s: stream, + l: logrus.WithField("component", "logship_channel"), + closeWait: make(chan struct{}), + mSend: prometheus.NewCounter(prometheus.CounterOpts{ + Namespace: rtaPrometheusNamespace, + Subsystem: logShipPrometheusSubsystem, + Name: "messages_sent_total", + Help: "A total number of shipped log messages to pmm-managed.", + }), + } + + go c.runHealthPing() + + return c +} + +// runHealthPing sends an empty ShipRequest periodically to keep the stream alive during quiet periods, +// the same way RTAChannel does. +func (c *LogShipChannel) runHealthPing() { + pingReq := &logshipv1.ShipRequest{} + + ticker := time.NewTicker(pingInterval) + defer ticker.Stop() + + for { + select { + case <-c.closeWait: + return + case <-ticker.C: + c.Send(pingReq) + } + } +} + +func (c *LogShipChannel) close(err error) { + c.closeOnce.Do(func() { + c.l.Debugf("Closing with error: %+v", err) + c.closeErr = err + + c.sendM.Lock() + _, closeErr := c.s.CloseAndRecv() + if closeErr != nil { + c.l.Errorf("Failed to receive final response: %v", closeErr) + } + + close(c.closeWait) + c.sendM.Unlock() + }) +} + +// Wait blocks until the channel is closed and returns the reason why it was closed. +func (c *LogShipChannel) Wait() error { + <-c.closeWait + return c.closeErr +} + +// Send ships a message to pmm-managed. It is a no-op once the channel is closed (see Wait). +func (c *LogShipChannel) Send(msg *logshipv1.ShipRequest) { + c.sendM.Lock() + + select { + case <-c.closeWait: + c.sendM.Unlock() + return + default: + } + + err := c.s.Send(msg) + c.sendM.Unlock() + + if err != nil { + c.l.Errorf("Failed to send message: %+v", status.Code(err)) + c.close(fmt.Errorf("failed to send message: %w", err)) + return + } + + c.mSend.Inc() +} + +// Describe implements prometheus.Collector. +func (c *LogShipChannel) Describe(ch chan<- *prometheus.Desc) { + c.mSend.Describe(ch) +} + +// Collect implements prometheus.Collector. +func (c *LogShipChannel) Collect(ch chan<- prometheus.Metric) { + c.mSend.Collect(ch) +} + +// check interfaces. +var ( + _ prometheus.Collector = (*LogShipChannel)(nil) +) diff --git a/agent/client/client.go b/agent/client/client.go index b4c12e18163..8d1f8dcdebf 100644 --- a/agent/client/client.go +++ b/agent/client/client.go @@ -48,6 +48,7 @@ import ( agenterrors "github.com/percona/pmm/agent/utils/errors" "github.com/percona/pmm/agent/utils/templates" agentv1 "github.com/percona/pmm/api/agent/v1" + logshipv1 "github.com/percona/pmm/api/logship/v1" rtav1 "github.com/percona/pmm/api/realtimeanalytics/v1" "github.com/percona/pmm/utils/tlsconfig" "github.com/percona/pmm/version" @@ -82,10 +83,11 @@ type Client struct { runner *runner.Runner - rw sync.RWMutex - md *agentv1.ServerConnectMetadata - channel *channel.Channel - rtaChannel *channel.RTAChannel + rw sync.RWMutex + md *agentv1.ServerConnectMetadata + channel *channel.Channel + rtaChannel *channel.RTAChannel + logShipChannel *channel.LogShipChannel cus *connectionuptime.Service logStore *tailog.Store @@ -145,6 +147,7 @@ func (c *Client) Run(ctx context.Context) error { var ( agentServiceDialResult *dialResult rtaChannel *channel.RTAChannel + logShipChannel *channel.LogShipChannel sharedConn *grpc.ClientConn connErr, agentServiceDialErr, rtaServiceDialErr error ) @@ -174,6 +177,19 @@ func (c *Client) Run(ctx context.Context) error { if rtaServiceDialErr != nil { c.l.Errorf("Failed to create communication channel to Real-Time Analytics service: %s.", rtaServiceDialErr) } else { + // Optionally create the log-shipping channel over the same connection. A failure here + // must not block the agent (monitoring works without log shipping), so we log and continue. + if cfg.LogShip { + logShipDialCtx, logShipDialCancel := context.WithTimeout(ctx, c.dialTimeout) + var logShipErr error + logShipChannel, logShipErr = createChannelToLogShipService(logShipDialCtx, sharedConn, cfg, c.l) + logShipDialCancel() + if logShipErr != nil { + c.l.Warnf("Failed to create log shipping channel (logs will not be shipped): %s.", logShipErr) + logShipChannel = nil + } + } + // stop connection loop retries - we are connected to both Agents and RTA services successfully. break } @@ -231,6 +247,7 @@ func (c *Client) Run(ctx context.Context) error { c.md = agentServiceDialResult.md c.channel = agentServiceDialResult.channel c.rtaChannel = rtaChannel + c.logShipChannel = logShipChannel c.rw.Unlock() // Once the client is connected, ctx cancellation is ignored by it. @@ -418,6 +435,23 @@ func (c *Client) processSupervisorRequests(ctx context.Context) { //nolint:gocog } } }) + + wg.Go(func() { + for { + select { + case req := <-c.supervisor.LogRequests(): + // logShipChannel is nil when log shipping is disabled or its channel failed to open. + if req == nil || c.logShipChannel == nil { + continue + } + + c.logShipChannel.Send(req) + case <-ctx.Done(): + c.l.Infof("Supervisor LogRequests() channel drained.") + return + } + } + }) wg.Wait() } @@ -978,6 +1012,34 @@ func createChannelToRealTimeAnalyticsService(dialCtx context.Context, conn *grpc return channel.NewRTAChannel(stream), nil } +// createChannelToLogShipService creates a uni-directional log-shipping channel over the shared gRPC +// connection. Unlike the RTA channel it does NOT close the shared connection on failure (the agent and +// RTA channels keep using it); log shipping is best-effort. +func createChannelToLogShipService(dialCtx context.Context, conn *grpc.ClientConn, cfg *config.Config, l *logrus.Entry) (*channel.LogShipChannel, error) { + streamCtx, streamCancel := context.WithCancel(context.Background()) + + d, ok := dialCtx.Deadline() + if !ok { + panic("no deadline in dialCtx") + } + streamCancelT := time.AfterFunc(time.Until(d), streamCancel) + defer streamCancelT.Stop() + + l.Infof("Establishing client streaming communication channel to Log Ship Service at %s ...", cfg.Server.FilteredURL()) + + streamCtx = agentv1.AddAgentConnectMetadata(streamCtx, &agentv1.AgentConnectMetadata{ + ID: cfg.ID, + Version: version.Version, + }) + stream, err := logshipv1.NewLogShipServiceClient(conn).Ship(streamCtx, grpc.UseCompressor(grpc_gzip.Name)) //nolint:contextcheck + if err != nil { + streamCancel() + return nil, errors.Wrap(err, "failed to connect") + } + + return channel.NewLogShipChannel(stream), nil +} + func getNetworkInformation(channel *channel.Channel) (latency, clockDrift time.Duration, err error) { //nolint:nonamedreturns start := time.Now() var resp agentv1.ServerResponsePayload @@ -1041,6 +1103,7 @@ func (c *Client) Collect(ch chan<- prometheus.Metric) { c.rw.RLock() channel := c.channel rtaChannel := c.rtaChannel + logShipChannel := c.logShipChannel c.rw.RUnlock() desc := prometheus.NewDesc("pmm_agent_connected", "Has value 1 if two-way communication channel is established.", nil, nil) @@ -1055,6 +1118,10 @@ func (c *Client) Collect(ch chan<- prometheus.Metric) { rtaChannel.Collect(ch) } + if logShipChannel != nil { + logShipChannel.Collect(ch) + } + c.supervisor.Collect(ch) } diff --git a/agent/client/client_test.go b/agent/client/client_test.go index affb757063d..c01a5c8b7a9 100644 --- a/agent/client/client_test.go +++ b/agent/client/client_test.go @@ -35,6 +35,7 @@ import ( "github.com/percona/pmm/agent/runner" agentv1 "github.com/percona/pmm/api/agent/v1" agentlocal "github.com/percona/pmm/api/agentlocal/v1" + logshipv1 "github.com/percona/pmm/api/logship/v1" rtav1 "github.com/percona/pmm/api/realtimeanalytics/v1" ) @@ -163,6 +164,7 @@ func TestClient(t *testing.T) { s.On("Changes").Return(make(<-chan *agentv1.StateChangedRequest)) s.On("QANRequests").Return(make(<-chan *agentv1.QANCollectRequest)) s.On("RTARequests").Return(make(<-chan *rtav1.CollectRequest)) + s.On("LogRequests").Return(make(<-chan *logshipv1.ShipRequest)) s.On("AgentsList").Return([]*agentlocal.AgentInfo{}) s.On("ClearChangesChannel").Return() @@ -282,6 +284,7 @@ func TestUnexpectedActionType(t *testing.T) { s.On("Changes").Return(make(<-chan *agentv1.StateChangedRequest)) s.On("QANRequests").Return(make(<-chan *agentv1.QANCollectRequest)) s.On("RTARequests").Return(make(<-chan *rtav1.CollectRequest)) + s.On("LogRequests").Return(make(<-chan *logshipv1.ShipRequest)) s.On("AgentsList").Return([]*agentlocal.AgentInfo{}) s.On("ClearChangesChannel").Return() diff --git a/agent/client/deps.go b/agent/client/deps.go index ae1f3171de9..bd3be6f313a 100644 --- a/agent/client/deps.go +++ b/agent/client/deps.go @@ -21,6 +21,7 @@ import ( agentv1 "github.com/percona/pmm/api/agent/v1" agentlocal "github.com/percona/pmm/api/agentlocal/v1" + logshipv1 "github.com/percona/pmm/api/logship/v1" rtav1 "github.com/percona/pmm/api/realtimeanalytics/v1" ) @@ -52,6 +53,7 @@ type supervisor interface { Changes() <-chan *agentv1.StateChangedRequest QANRequests() <-chan *agentv1.QANCollectRequest RTARequests() <-chan *rtav1.CollectRequest + LogRequests() <-chan *logshipv1.ShipRequest SetState(*agentv1.SetStateRequest) RestartAgents() AgentLogByID(string) ([]string, uint) diff --git a/agent/client/mock_supervisor_test.go b/agent/client/mock_supervisor_test.go index 61306996404..d5266e28174 100644 --- a/agent/client/mock_supervisor_test.go +++ b/agent/client/mock_supervisor_test.go @@ -8,6 +8,7 @@ import ( agentv1 "github.com/percona/pmm/api/agent/v1" agentlocalv1 "github.com/percona/pmm/api/agentlocal/v1" + logshipv1 "github.com/percona/pmm/api/logship/v1" realtimeanalyticsv1 "github.com/percona/pmm/api/realtimeanalytics/v1" ) @@ -141,6 +142,26 @@ func (_m *mockSupervisor) RTARequests() <-chan *realtimeanalyticsv1.CollectReque return r0 } +// LogRequests provides a mock function with no fields +func (_m *mockSupervisor) LogRequests() <-chan *logshipv1.ShipRequest { + ret := _m.Called() + + if len(ret) == 0 { + panic("no return value specified for LogRequests") + } + + var r0 <-chan *logshipv1.ShipRequest + if rf, ok := ret.Get(0).(func() <-chan *logshipv1.ShipRequest); ok { + r0 = rf() + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(<-chan *logshipv1.ShipRequest) + } + } + + return r0 +} + // RestartAgents provides a mock function with no fields func (_m *mockSupervisor) RestartAgents() { _m.Called() diff --git a/agent/commands/run.go b/agent/commands/run.go index b0c1c706ef5..010925d421a 100644 --- a/agent/commands/run.go +++ b/agent/commands/run.go @@ -69,6 +69,14 @@ func Run() { prepareLogger(cfg, logStore, l) supervisor := supervisor.NewSupervisor(ctx, v, configStorage) + if cfg.LogShip { + // Also ship pmm-agent's own logs (in addition to stderr and the in-memory store) through the + // same supervisor channel the client drains. + logrus.SetOutput(io.MultiWriter(os.Stderr, logStore, supervisor.LogWriter("pmm-agent", map[string]string{ + "pmm.agent_id": cfg.ID, + "pmm.source": "client", + }))) + } connectionChecker := connectionchecker.New(configStorage) serviceInfoBroker := serviceinfobroker.New(configStorage) r := runner.New(cfg.RunnerCapacity, cfg.RunnerMaxConnectionsPerService) diff --git a/agent/config/config.go b/agent/config/config.go index f1ddef9cb46..b0d915bfc1e 100644 --- a/agent/config/config.go +++ b/agent/config/config.go @@ -168,6 +168,9 @@ type Config struct { LogLinesCount uint `json:"log-lines-count"` PerfschemaRefreshRate uint16 `yaml:"perfschema-refresh-rate,omitempty"` + // LogShip enables continuous shipping of pmm-agent, exporter and database logs to PMM Server. + LogShip bool `yaml:"log-ship,omitempty"` + WindowConnectedTime time.Duration `yaml:"window-connected-time"` Setup Setup `yaml:"-"` @@ -442,6 +445,9 @@ func Application(cfg *Config) (*kingpin.Application, *string) { app.Flag("log-lines-count", "Take and return N most recent log lines in logs.zip for each: server, every configured exporters and agents [PMM_AGENT_LOG_LINES_COUNT]"). Envar("PMM_AGENT_LOG_LINES_COUNT").Default("1024").UintVar(&cfg.LogLinesCount) + app.Flag("log-ship", + "Continuously ship pmm-agent, exporter and database logs to PMM Server [PMM_AGENT_LOG_SHIP]"). + Envar("PMM_AGENT_LOG_SHIP").BoolVar(&cfg.LogShip) app.Flag("perfschema-refresh-rate", "Change how often PMM scrapes data from Performance Schema (in seconds) [PMM_AGENT_PERFSCHEMA_REFRESH_RATE]"). Envar("PMM_AGENT_PERFSCHEMA_REFRESH_RATE").Uint16Var(&cfg.PerfschemaRefreshRate) diff --git a/api/agent/v1/agent.pb.go b/api/agent/v1/agent.pb.go index c2f2a8b6a9e..ac64fbe877d 100644 --- a/api/agent/v1/agent.pb.go +++ b/api/agent/v1/agent.pb.go @@ -7,19 +7,17 @@ package agentv1 import ( - reflect "reflect" - sync "sync" - unsafe "unsafe" - + v11 "github.com/percona/pmm/api/backup/v1" + _ "github.com/percona/pmm/api/extensions/v1" + v1 "github.com/percona/pmm/api/inventory/v1" status "google.golang.org/genproto/googleapis/rpc/status" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" - - v11 "github.com/percona/pmm/api/backup/v1" - _ "github.com/percona/pmm/api/extensions/v1" - v1 "github.com/percona/pmm/api/inventory/v1" + reflect "reflect" + sync "sync" + unsafe "unsafe" ) const ( @@ -3788,7 +3786,11 @@ type SetStateRequest_BuiltinAgent struct { ServiceId string `protobuf:"bytes,12,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` // Service name of the service where the agent connects to. // Currently used by Real-Time Analytics built-in agent only. - ServiceName string `protobuf:"bytes,13,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` + ServiceName string `protobuf:"bytes,13,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` + // Database log files to watch and ship. Used by the database log-watcher agent only. + WatchedLogs []*v1.WatchedLog `protobuf:"bytes,14,rep,name=watched_logs,json=watchedLogs,proto3" json:"watched_logs,omitempty"` + // Database engine of the watched service (mysql, postgresql, ...). Used by the log-watcher agent only. + DbSystem string `protobuf:"bytes,15,opt,name=db_system,json=dbSystem,proto3" json:"db_system,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3914,6 +3916,20 @@ func (x *SetStateRequest_BuiltinAgent) GetServiceName() string { return "" } +func (x *SetStateRequest_BuiltinAgent) GetWatchedLogs() []*v1.WatchedLog { + if x != nil { + return x.WatchedLogs + } + return nil +} + +func (x *SetStateRequest_BuiltinAgent) GetDbSystem() string { + if x != nil { + return x.DbSystem + } + return "" +} + // MySQLExplainParams describes MySQL EXPLAIN action parameters. type StartActionRequest_MySQLExplainParams struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -6655,7 +6671,7 @@ const file_agent_v1_agent_proto_rawDesc = "" + "listenPort\x12*\n" + "\x11process_exec_path\x18\x04 \x01(\tR\x0fprocessExecPath\x12\x18\n" + "\aversion\x18\x05 \x01(\tR\aversion\"\x16\n" + - "\x14StateChangedResponse\"\xd9\v\n" + + "\x14StateChangedResponse\"\xb3\f\n" + "\x0fSetStateRequest\x12V\n" + "\x0fagent_processes\x18\x01 \x03(\v2-.agent.v1.SetStateRequest.AgentProcessesEntryR\x0eagentProcesses\x12S\n" + "\x0ebuiltin_agents\x18\x02 \x03(\v2,.agent.v1.SetStateRequest.BuiltinAgentsEntryR\rbuiltinAgents\x1a\xba\x03\n" + @@ -6674,7 +6690,7 @@ const file_agent_v1_agent_proto_rawDesc = "" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1ai\n" + "\x13AgentProcessesEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12<\n" + - "\x05value\x18\x02 \x01(\v2&.agent.v1.SetStateRequest.AgentProcessR\x05value:\x028\x01\x1a\x86\x05\n" + + "\x05value\x18\x02 \x01(\v2&.agent.v1.SetStateRequest.AgentProcessR\x05value:\x028\x01\x1a\xe0\x05\n" + "\fBuiltinAgent\x12+\n" + "\x04type\x18\x01 \x01(\x0e2\x17.inventory.v1.AgentTypeR\x04type\x12\x16\n" + "\x03dsn\x18\x02 \x01(\tB\x04\x88\xb5\x18\x03R\x03dsn\x12(\n" + @@ -6692,7 +6708,9 @@ const file_agent_v1_agent_proto_rawDesc = "" + "rtaOptions\x12\x1d\n" + "\n" + "service_id\x18\f \x01(\tR\tserviceId\x12!\n" + - "\fservice_name\x18\r \x01(\tR\vserviceName\x1a6\n" + + "\fservice_name\x18\r \x01(\tR\vserviceName\x12;\n" + + "\fwatched_logs\x18\x0e \x03(\v2\x18.inventory.v1.WatchedLogR\vwatchedLogs\x12\x1b\n" + + "\tdb_system\x18\x0f \x01(\tR\bdbSystem\x1a6\n" + "\bEnvEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1ah\n" + @@ -7110,118 +7128,116 @@ func file_agent_v1_agent_proto_rawDescGZIP() []byte { return file_agent_v1_agent_proto_rawDescData } -var ( - file_agent_v1_agent_proto_enumTypes = make([]protoimpl.EnumInfo, 2) - file_agent_v1_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 92) - file_agent_v1_agent_proto_goTypes = []any{ - MysqlExplainOutputFormat(0), // 0: agent.v1.MysqlExplainOutputFormat - StartActionRequest_RestartSystemServiceParams_SystemService(0), // 1: agent.v1.StartActionRequest.RestartSystemServiceParams.SystemService - (*TextFiles)(nil), // 2: agent.v1.TextFiles - (*Ping)(nil), // 3: agent.v1.Ping - (*Pong)(nil), // 4: agent.v1.Pong - (*QANCollectRequest)(nil), // 5: agent.v1.QANCollectRequest - (*QANCollectResponse)(nil), // 6: agent.v1.QANCollectResponse - (*StateChangedRequest)(nil), // 7: agent.v1.StateChangedRequest - (*StateChangedResponse)(nil), // 8: agent.v1.StateChangedResponse - (*SetStateRequest)(nil), // 9: agent.v1.SetStateRequest - (*SetStateResponse)(nil), // 10: agent.v1.SetStateResponse - (*QueryActionValue)(nil), // 11: agent.v1.QueryActionValue - (*QueryActionSlice)(nil), // 12: agent.v1.QueryActionSlice - (*QueryActionMap)(nil), // 13: agent.v1.QueryActionMap - (*QueryActionBinary)(nil), // 14: agent.v1.QueryActionBinary - (*QueryActionResult)(nil), // 15: agent.v1.QueryActionResult - (*StartActionRequest)(nil), // 16: agent.v1.StartActionRequest - (*StartActionResponse)(nil), // 17: agent.v1.StartActionResponse - (*StopActionRequest)(nil), // 18: agent.v1.StopActionRequest - (*StopActionResponse)(nil), // 19: agent.v1.StopActionResponse - (*ActionResultRequest)(nil), // 20: agent.v1.ActionResultRequest - (*ActionResultResponse)(nil), // 21: agent.v1.ActionResultResponse - (*PBMSwitchPITRRequest)(nil), // 22: agent.v1.PBMSwitchPITRRequest - (*PBMSwitchPITRResponse)(nil), // 23: agent.v1.PBMSwitchPITRResponse - (*AgentLogsRequest)(nil), // 24: agent.v1.AgentLogsRequest - (*AgentLogsResponse)(nil), // 25: agent.v1.AgentLogsResponse - (*CheckConnectionRequest)(nil), // 26: agent.v1.CheckConnectionRequest - (*CheckConnectionResponse)(nil), // 27: agent.v1.CheckConnectionResponse - (*ServiceInfoRequest)(nil), // 28: agent.v1.ServiceInfoRequest - (*ServiceInfoResponse)(nil), // 29: agent.v1.ServiceInfoResponse - (*JobStatusRequest)(nil), // 30: agent.v1.JobStatusRequest - (*JobStatusResponse)(nil), // 31: agent.v1.JobStatusResponse - (*S3LocationConfig)(nil), // 32: agent.v1.S3LocationConfig - (*FilesystemLocationConfig)(nil), // 33: agent.v1.FilesystemLocationConfig - (*StartJobRequest)(nil), // 34: agent.v1.StartJobRequest - (*StartJobResponse)(nil), // 35: agent.v1.StartJobResponse - (*StopJobRequest)(nil), // 36: agent.v1.StopJobRequest - (*StopJobResponse)(nil), // 37: agent.v1.StopJobResponse - (*JobResult)(nil), // 38: agent.v1.JobResult - (*JobProgress)(nil), // 39: agent.v1.JobProgress - (*GetVersionsRequest)(nil), // 40: agent.v1.GetVersionsRequest - (*GetVersionsResponse)(nil), // 41: agent.v1.GetVersionsResponse - (*AgentMessage)(nil), // 42: agent.v1.AgentMessage - (*ServerMessage)(nil), // 43: agent.v1.ServerMessage - nil, // 44: agent.v1.TextFiles.FilesEntry - (*SetStateRequest_AgentProcess)(nil), // 45: agent.v1.SetStateRequest.AgentProcess - nil, // 46: agent.v1.SetStateRequest.AgentProcessesEntry - (*SetStateRequest_BuiltinAgent)(nil), // 47: agent.v1.SetStateRequest.BuiltinAgent - nil, // 48: agent.v1.SetStateRequest.BuiltinAgentsEntry - nil, // 49: agent.v1.SetStateRequest.AgentProcess.TextFilesEntry - nil, // 50: agent.v1.SetStateRequest.BuiltinAgent.EnvEntry - nil, // 51: agent.v1.QueryActionMap.MapEntry - (*StartActionRequest_MySQLExplainParams)(nil), // 52: agent.v1.StartActionRequest.MySQLExplainParams - (*StartActionRequest_MySQLShowCreateTableParams)(nil), // 53: agent.v1.StartActionRequest.MySQLShowCreateTableParams - (*StartActionRequest_MySQLShowTableStatusParams)(nil), // 54: agent.v1.StartActionRequest.MySQLShowTableStatusParams - (*StartActionRequest_MySQLShowIndexParams)(nil), // 55: agent.v1.StartActionRequest.MySQLShowIndexParams - (*StartActionRequest_PostgreSQLShowCreateTableParams)(nil), // 56: agent.v1.StartActionRequest.PostgreSQLShowCreateTableParams - (*StartActionRequest_PostgreSQLShowIndexParams)(nil), // 57: agent.v1.StartActionRequest.PostgreSQLShowIndexParams - (*StartActionRequest_MongoDBExplainParams)(nil), // 58: agent.v1.StartActionRequest.MongoDBExplainParams - (*StartActionRequest_PTSummaryParams)(nil), // 59: agent.v1.StartActionRequest.PTSummaryParams - (*StartActionRequest_PTPgSummaryParams)(nil), // 60: agent.v1.StartActionRequest.PTPgSummaryParams - (*StartActionRequest_PTMongoDBSummaryParams)(nil), // 61: agent.v1.StartActionRequest.PTMongoDBSummaryParams - (*StartActionRequest_PTMySQLSummaryParams)(nil), // 62: agent.v1.StartActionRequest.PTMySQLSummaryParams - (*StartActionRequest_MySQLQueryShowParams)(nil), // 63: agent.v1.StartActionRequest.MySQLQueryShowParams - (*StartActionRequest_MySQLQuerySelectParams)(nil), // 64: agent.v1.StartActionRequest.MySQLQuerySelectParams - (*StartActionRequest_PostgreSQLQueryShowParams)(nil), // 65: agent.v1.StartActionRequest.PostgreSQLQueryShowParams - (*StartActionRequest_PostgreSQLQuerySelectParams)(nil), // 66: agent.v1.StartActionRequest.PostgreSQLQuerySelectParams - (*StartActionRequest_MongoDBQueryGetParameterParams)(nil), // 67: agent.v1.StartActionRequest.MongoDBQueryGetParameterParams - (*StartActionRequest_MongoDBQueryBuildInfoParams)(nil), // 68: agent.v1.StartActionRequest.MongoDBQueryBuildInfoParams - (*StartActionRequest_MongoDBQueryGetCmdLineOptsParams)(nil), // 69: agent.v1.StartActionRequest.MongoDBQueryGetCmdLineOptsParams - (*StartActionRequest_MongoDBQueryReplSetGetStatusParams)(nil), // 70: agent.v1.StartActionRequest.MongoDBQueryReplSetGetStatusParams - (*StartActionRequest_MongoDBQueryGetDiagnosticDataParams)(nil), // 71: agent.v1.StartActionRequest.MongoDBQueryGetDiagnosticDataParams - (*StartActionRequest_RestartSystemServiceParams)(nil), // 72: agent.v1.StartActionRequest.RestartSystemServiceParams - (*CheckConnectionResponse_Stats)(nil), // 73: agent.v1.CheckConnectionResponse.Stats - (*StartJobRequest_MySQLBackup)(nil), // 74: agent.v1.StartJobRequest.MySQLBackup - (*StartJobRequest_MySQLRestoreBackup)(nil), // 75: agent.v1.StartJobRequest.MySQLRestoreBackup - (*StartJobRequest_MongoDBBackup)(nil), // 76: agent.v1.StartJobRequest.MongoDBBackup - (*StartJobRequest_MongoDBRestoreBackup)(nil), // 77: agent.v1.StartJobRequest.MongoDBRestoreBackup - (*JobResult_Error)(nil), // 78: agent.v1.JobResult.Error - (*JobResult_MongoDBBackup)(nil), // 79: agent.v1.JobResult.MongoDBBackup - (*JobResult_MySQLBackup)(nil), // 80: agent.v1.JobResult.MySQLBackup - (*JobResult_MySQLRestoreBackup)(nil), // 81: agent.v1.JobResult.MySQLRestoreBackup - (*JobResult_MongoDBRestoreBackup)(nil), // 82: agent.v1.JobResult.MongoDBRestoreBackup - (*JobProgress_MySQLBackup)(nil), // 83: agent.v1.JobProgress.MySQLBackup - (*JobProgress_MySQLRestoreBackup)(nil), // 84: agent.v1.JobProgress.MySQLRestoreBackup - (*JobProgress_Logs)(nil), // 85: agent.v1.JobProgress.Logs - (*GetVersionsRequest_MySQLd)(nil), // 86: agent.v1.GetVersionsRequest.MySQLd - (*GetVersionsRequest_Xtrabackup)(nil), // 87: agent.v1.GetVersionsRequest.Xtrabackup - (*GetVersionsRequest_Xbcloud)(nil), // 88: agent.v1.GetVersionsRequest.Xbcloud - (*GetVersionsRequest_Qpress)(nil), // 89: agent.v1.GetVersionsRequest.Qpress - (*GetVersionsRequest_MongoDB)(nil), // 90: agent.v1.GetVersionsRequest.MongoDB - (*GetVersionsRequest_PBM)(nil), // 91: agent.v1.GetVersionsRequest.PBM - (*GetVersionsRequest_Software)(nil), // 92: agent.v1.GetVersionsRequest.Software - (*GetVersionsResponse_Version)(nil), // 93: agent.v1.GetVersionsResponse.Version - (*timestamppb.Timestamp)(nil), // 94: google.protobuf.Timestamp - (*MetricsBucket)(nil), // 95: agent.v1.MetricsBucket - v1.AgentStatus(0), // 96: inventory.v1.AgentStatus - (*durationpb.Duration)(nil), // 97: google.protobuf.Duration - v1.ServiceType(0), // 98: inventory.v1.ServiceType - (*status.Status)(nil), // 99: google.rpc.Status - v1.AgentType(0), // 100: inventory.v1.AgentType - (*v1.RTAOptions)(nil), // 101: inventory.v1.RTAOptions - v11.DataModel(0), // 102: backup.v1.DataModel - (*v11.PbmMetadata)(nil), // 103: backup.v1.PbmMetadata - (*v11.Metadata)(nil), // 104: backup.v1.Metadata - } -) - +var file_agent_v1_agent_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_agent_v1_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 92) +var file_agent_v1_agent_proto_goTypes = []any{ + (MysqlExplainOutputFormat)(0), // 0: agent.v1.MysqlExplainOutputFormat + (StartActionRequest_RestartSystemServiceParams_SystemService)(0), // 1: agent.v1.StartActionRequest.RestartSystemServiceParams.SystemService + (*TextFiles)(nil), // 2: agent.v1.TextFiles + (*Ping)(nil), // 3: agent.v1.Ping + (*Pong)(nil), // 4: agent.v1.Pong + (*QANCollectRequest)(nil), // 5: agent.v1.QANCollectRequest + (*QANCollectResponse)(nil), // 6: agent.v1.QANCollectResponse + (*StateChangedRequest)(nil), // 7: agent.v1.StateChangedRequest + (*StateChangedResponse)(nil), // 8: agent.v1.StateChangedResponse + (*SetStateRequest)(nil), // 9: agent.v1.SetStateRequest + (*SetStateResponse)(nil), // 10: agent.v1.SetStateResponse + (*QueryActionValue)(nil), // 11: agent.v1.QueryActionValue + (*QueryActionSlice)(nil), // 12: agent.v1.QueryActionSlice + (*QueryActionMap)(nil), // 13: agent.v1.QueryActionMap + (*QueryActionBinary)(nil), // 14: agent.v1.QueryActionBinary + (*QueryActionResult)(nil), // 15: agent.v1.QueryActionResult + (*StartActionRequest)(nil), // 16: agent.v1.StartActionRequest + (*StartActionResponse)(nil), // 17: agent.v1.StartActionResponse + (*StopActionRequest)(nil), // 18: agent.v1.StopActionRequest + (*StopActionResponse)(nil), // 19: agent.v1.StopActionResponse + (*ActionResultRequest)(nil), // 20: agent.v1.ActionResultRequest + (*ActionResultResponse)(nil), // 21: agent.v1.ActionResultResponse + (*PBMSwitchPITRRequest)(nil), // 22: agent.v1.PBMSwitchPITRRequest + (*PBMSwitchPITRResponse)(nil), // 23: agent.v1.PBMSwitchPITRResponse + (*AgentLogsRequest)(nil), // 24: agent.v1.AgentLogsRequest + (*AgentLogsResponse)(nil), // 25: agent.v1.AgentLogsResponse + (*CheckConnectionRequest)(nil), // 26: agent.v1.CheckConnectionRequest + (*CheckConnectionResponse)(nil), // 27: agent.v1.CheckConnectionResponse + (*ServiceInfoRequest)(nil), // 28: agent.v1.ServiceInfoRequest + (*ServiceInfoResponse)(nil), // 29: agent.v1.ServiceInfoResponse + (*JobStatusRequest)(nil), // 30: agent.v1.JobStatusRequest + (*JobStatusResponse)(nil), // 31: agent.v1.JobStatusResponse + (*S3LocationConfig)(nil), // 32: agent.v1.S3LocationConfig + (*FilesystemLocationConfig)(nil), // 33: agent.v1.FilesystemLocationConfig + (*StartJobRequest)(nil), // 34: agent.v1.StartJobRequest + (*StartJobResponse)(nil), // 35: agent.v1.StartJobResponse + (*StopJobRequest)(nil), // 36: agent.v1.StopJobRequest + (*StopJobResponse)(nil), // 37: agent.v1.StopJobResponse + (*JobResult)(nil), // 38: agent.v1.JobResult + (*JobProgress)(nil), // 39: agent.v1.JobProgress + (*GetVersionsRequest)(nil), // 40: agent.v1.GetVersionsRequest + (*GetVersionsResponse)(nil), // 41: agent.v1.GetVersionsResponse + (*AgentMessage)(nil), // 42: agent.v1.AgentMessage + (*ServerMessage)(nil), // 43: agent.v1.ServerMessage + nil, // 44: agent.v1.TextFiles.FilesEntry + (*SetStateRequest_AgentProcess)(nil), // 45: agent.v1.SetStateRequest.AgentProcess + nil, // 46: agent.v1.SetStateRequest.AgentProcessesEntry + (*SetStateRequest_BuiltinAgent)(nil), // 47: agent.v1.SetStateRequest.BuiltinAgent + nil, // 48: agent.v1.SetStateRequest.BuiltinAgentsEntry + nil, // 49: agent.v1.SetStateRequest.AgentProcess.TextFilesEntry + nil, // 50: agent.v1.SetStateRequest.BuiltinAgent.EnvEntry + nil, // 51: agent.v1.QueryActionMap.MapEntry + (*StartActionRequest_MySQLExplainParams)(nil), // 52: agent.v1.StartActionRequest.MySQLExplainParams + (*StartActionRequest_MySQLShowCreateTableParams)(nil), // 53: agent.v1.StartActionRequest.MySQLShowCreateTableParams + (*StartActionRequest_MySQLShowTableStatusParams)(nil), // 54: agent.v1.StartActionRequest.MySQLShowTableStatusParams + (*StartActionRequest_MySQLShowIndexParams)(nil), // 55: agent.v1.StartActionRequest.MySQLShowIndexParams + (*StartActionRequest_PostgreSQLShowCreateTableParams)(nil), // 56: agent.v1.StartActionRequest.PostgreSQLShowCreateTableParams + (*StartActionRequest_PostgreSQLShowIndexParams)(nil), // 57: agent.v1.StartActionRequest.PostgreSQLShowIndexParams + (*StartActionRequest_MongoDBExplainParams)(nil), // 58: agent.v1.StartActionRequest.MongoDBExplainParams + (*StartActionRequest_PTSummaryParams)(nil), // 59: agent.v1.StartActionRequest.PTSummaryParams + (*StartActionRequest_PTPgSummaryParams)(nil), // 60: agent.v1.StartActionRequest.PTPgSummaryParams + (*StartActionRequest_PTMongoDBSummaryParams)(nil), // 61: agent.v1.StartActionRequest.PTMongoDBSummaryParams + (*StartActionRequest_PTMySQLSummaryParams)(nil), // 62: agent.v1.StartActionRequest.PTMySQLSummaryParams + (*StartActionRequest_MySQLQueryShowParams)(nil), // 63: agent.v1.StartActionRequest.MySQLQueryShowParams + (*StartActionRequest_MySQLQuerySelectParams)(nil), // 64: agent.v1.StartActionRequest.MySQLQuerySelectParams + (*StartActionRequest_PostgreSQLQueryShowParams)(nil), // 65: agent.v1.StartActionRequest.PostgreSQLQueryShowParams + (*StartActionRequest_PostgreSQLQuerySelectParams)(nil), // 66: agent.v1.StartActionRequest.PostgreSQLQuerySelectParams + (*StartActionRequest_MongoDBQueryGetParameterParams)(nil), // 67: agent.v1.StartActionRequest.MongoDBQueryGetParameterParams + (*StartActionRequest_MongoDBQueryBuildInfoParams)(nil), // 68: agent.v1.StartActionRequest.MongoDBQueryBuildInfoParams + (*StartActionRequest_MongoDBQueryGetCmdLineOptsParams)(nil), // 69: agent.v1.StartActionRequest.MongoDBQueryGetCmdLineOptsParams + (*StartActionRequest_MongoDBQueryReplSetGetStatusParams)(nil), // 70: agent.v1.StartActionRequest.MongoDBQueryReplSetGetStatusParams + (*StartActionRequest_MongoDBQueryGetDiagnosticDataParams)(nil), // 71: agent.v1.StartActionRequest.MongoDBQueryGetDiagnosticDataParams + (*StartActionRequest_RestartSystemServiceParams)(nil), // 72: agent.v1.StartActionRequest.RestartSystemServiceParams + (*CheckConnectionResponse_Stats)(nil), // 73: agent.v1.CheckConnectionResponse.Stats + (*StartJobRequest_MySQLBackup)(nil), // 74: agent.v1.StartJobRequest.MySQLBackup + (*StartJobRequest_MySQLRestoreBackup)(nil), // 75: agent.v1.StartJobRequest.MySQLRestoreBackup + (*StartJobRequest_MongoDBBackup)(nil), // 76: agent.v1.StartJobRequest.MongoDBBackup + (*StartJobRequest_MongoDBRestoreBackup)(nil), // 77: agent.v1.StartJobRequest.MongoDBRestoreBackup + (*JobResult_Error)(nil), // 78: agent.v1.JobResult.Error + (*JobResult_MongoDBBackup)(nil), // 79: agent.v1.JobResult.MongoDBBackup + (*JobResult_MySQLBackup)(nil), // 80: agent.v1.JobResult.MySQLBackup + (*JobResult_MySQLRestoreBackup)(nil), // 81: agent.v1.JobResult.MySQLRestoreBackup + (*JobResult_MongoDBRestoreBackup)(nil), // 82: agent.v1.JobResult.MongoDBRestoreBackup + (*JobProgress_MySQLBackup)(nil), // 83: agent.v1.JobProgress.MySQLBackup + (*JobProgress_MySQLRestoreBackup)(nil), // 84: agent.v1.JobProgress.MySQLRestoreBackup + (*JobProgress_Logs)(nil), // 85: agent.v1.JobProgress.Logs + (*GetVersionsRequest_MySQLd)(nil), // 86: agent.v1.GetVersionsRequest.MySQLd + (*GetVersionsRequest_Xtrabackup)(nil), // 87: agent.v1.GetVersionsRequest.Xtrabackup + (*GetVersionsRequest_Xbcloud)(nil), // 88: agent.v1.GetVersionsRequest.Xbcloud + (*GetVersionsRequest_Qpress)(nil), // 89: agent.v1.GetVersionsRequest.Qpress + (*GetVersionsRequest_MongoDB)(nil), // 90: agent.v1.GetVersionsRequest.MongoDB + (*GetVersionsRequest_PBM)(nil), // 91: agent.v1.GetVersionsRequest.PBM + (*GetVersionsRequest_Software)(nil), // 92: agent.v1.GetVersionsRequest.Software + (*GetVersionsResponse_Version)(nil), // 93: agent.v1.GetVersionsResponse.Version + (*timestamppb.Timestamp)(nil), // 94: google.protobuf.Timestamp + (*MetricsBucket)(nil), // 95: agent.v1.MetricsBucket + (v1.AgentStatus)(0), // 96: inventory.v1.AgentStatus + (*durationpb.Duration)(nil), // 97: google.protobuf.Duration + (v1.ServiceType)(0), // 98: inventory.v1.ServiceType + (*status.Status)(nil), // 99: google.rpc.Status + (v1.AgentType)(0), // 100: inventory.v1.AgentType + (*v1.RTAOptions)(nil), // 101: inventory.v1.RTAOptions + (*v1.WatchedLog)(nil), // 102: inventory.v1.WatchedLog + (v11.DataModel)(0), // 103: backup.v1.DataModel + (*v11.PbmMetadata)(nil), // 104: backup.v1.PbmMetadata + (*v11.Metadata)(nil), // 105: backup.v1.Metadata +} var file_agent_v1_agent_proto_depIdxs = []int32{ 44, // 0: agent.v1.TextFiles.files:type_name -> agent.v1.TextFiles.FilesEntry 94, // 1: agent.v1.Pong.current_time:type_name -> google.protobuf.Timestamp @@ -7326,52 +7342,53 @@ var file_agent_v1_agent_proto_depIdxs = []int32{ 2, // 100: agent.v1.SetStateRequest.BuiltinAgent.text_files:type_name -> agent.v1.TextFiles 50, // 101: agent.v1.SetStateRequest.BuiltinAgent.env:type_name -> agent.v1.SetStateRequest.BuiltinAgent.EnvEntry 101, // 102: agent.v1.SetStateRequest.BuiltinAgent.rta_options:type_name -> inventory.v1.RTAOptions - 47, // 103: agent.v1.SetStateRequest.BuiltinAgentsEntry.value:type_name -> agent.v1.SetStateRequest.BuiltinAgent - 11, // 104: agent.v1.QueryActionMap.MapEntry.value:type_name -> agent.v1.QueryActionValue - 0, // 105: agent.v1.StartActionRequest.MySQLExplainParams.output_format:type_name -> agent.v1.MysqlExplainOutputFormat - 2, // 106: agent.v1.StartActionRequest.MySQLExplainParams.tls_files:type_name -> agent.v1.TextFiles - 2, // 107: agent.v1.StartActionRequest.MySQLShowCreateTableParams.tls_files:type_name -> agent.v1.TextFiles - 2, // 108: agent.v1.StartActionRequest.MySQLShowTableStatusParams.tls_files:type_name -> agent.v1.TextFiles - 2, // 109: agent.v1.StartActionRequest.MySQLShowIndexParams.tls_files:type_name -> agent.v1.TextFiles - 2, // 110: agent.v1.StartActionRequest.PostgreSQLShowCreateTableParams.tls_files:type_name -> agent.v1.TextFiles - 2, // 111: agent.v1.StartActionRequest.PostgreSQLShowIndexParams.tls_files:type_name -> agent.v1.TextFiles - 2, // 112: agent.v1.StartActionRequest.MongoDBExplainParams.text_files:type_name -> agent.v1.TextFiles - 2, // 113: agent.v1.StartActionRequest.MySQLQueryShowParams.tls_files:type_name -> agent.v1.TextFiles - 2, // 114: agent.v1.StartActionRequest.MySQLQuerySelectParams.tls_files:type_name -> agent.v1.TextFiles - 2, // 115: agent.v1.StartActionRequest.PostgreSQLQueryShowParams.tls_files:type_name -> agent.v1.TextFiles - 2, // 116: agent.v1.StartActionRequest.PostgreSQLQuerySelectParams.tls_files:type_name -> agent.v1.TextFiles - 2, // 117: agent.v1.StartActionRequest.MongoDBQueryGetParameterParams.text_files:type_name -> agent.v1.TextFiles - 2, // 118: agent.v1.StartActionRequest.MongoDBQueryBuildInfoParams.text_files:type_name -> agent.v1.TextFiles - 2, // 119: agent.v1.StartActionRequest.MongoDBQueryGetCmdLineOptsParams.text_files:type_name -> agent.v1.TextFiles - 2, // 120: agent.v1.StartActionRequest.MongoDBQueryReplSetGetStatusParams.text_files:type_name -> agent.v1.TextFiles - 2, // 121: agent.v1.StartActionRequest.MongoDBQueryGetDiagnosticDataParams.text_files:type_name -> agent.v1.TextFiles - 1, // 122: agent.v1.StartActionRequest.RestartSystemServiceParams.system_service:type_name -> agent.v1.StartActionRequest.RestartSystemServiceParams.SystemService - 32, // 123: agent.v1.StartJobRequest.MySQLBackup.s3_config:type_name -> agent.v1.S3LocationConfig - 32, // 124: agent.v1.StartJobRequest.MySQLRestoreBackup.s3_config:type_name -> agent.v1.S3LocationConfig - 2, // 125: agent.v1.StartJobRequest.MongoDBBackup.text_files:type_name -> agent.v1.TextFiles - 102, // 126: agent.v1.StartJobRequest.MongoDBBackup.data_model:type_name -> backup.v1.DataModel - 32, // 127: agent.v1.StartJobRequest.MongoDBBackup.s3_config:type_name -> agent.v1.S3LocationConfig - 33, // 128: agent.v1.StartJobRequest.MongoDBBackup.filesystem_config:type_name -> agent.v1.FilesystemLocationConfig - 2, // 129: agent.v1.StartJobRequest.MongoDBRestoreBackup.text_files:type_name -> agent.v1.TextFiles - 103, // 130: agent.v1.StartJobRequest.MongoDBRestoreBackup.pbm_metadata:type_name -> backup.v1.PbmMetadata - 94, // 131: agent.v1.StartJobRequest.MongoDBRestoreBackup.pitr_timestamp:type_name -> google.protobuf.Timestamp - 32, // 132: agent.v1.StartJobRequest.MongoDBRestoreBackup.s3_config:type_name -> agent.v1.S3LocationConfig - 33, // 133: agent.v1.StartJobRequest.MongoDBRestoreBackup.filesystem_config:type_name -> agent.v1.FilesystemLocationConfig - 104, // 134: agent.v1.JobResult.MongoDBBackup.metadata:type_name -> backup.v1.Metadata - 104, // 135: agent.v1.JobResult.MySQLBackup.metadata:type_name -> backup.v1.Metadata - 86, // 136: agent.v1.GetVersionsRequest.Software.mysqld:type_name -> agent.v1.GetVersionsRequest.MySQLd - 87, // 137: agent.v1.GetVersionsRequest.Software.xtrabackup:type_name -> agent.v1.GetVersionsRequest.Xtrabackup - 88, // 138: agent.v1.GetVersionsRequest.Software.xbcloud:type_name -> agent.v1.GetVersionsRequest.Xbcloud - 89, // 139: agent.v1.GetVersionsRequest.Software.qpress:type_name -> agent.v1.GetVersionsRequest.Qpress - 90, // 140: agent.v1.GetVersionsRequest.Software.mongod:type_name -> agent.v1.GetVersionsRequest.MongoDB - 91, // 141: agent.v1.GetVersionsRequest.Software.pbm:type_name -> agent.v1.GetVersionsRequest.PBM - 42, // 142: agent.v1.AgentService.Connect:input_type -> agent.v1.AgentMessage - 43, // 143: agent.v1.AgentService.Connect:output_type -> agent.v1.ServerMessage - 143, // [143:144] is the sub-list for method output_type - 142, // [142:143] is the sub-list for method input_type - 142, // [142:142] is the sub-list for extension type_name - 142, // [142:142] is the sub-list for extension extendee - 0, // [0:142] is the sub-list for field type_name + 102, // 103: agent.v1.SetStateRequest.BuiltinAgent.watched_logs:type_name -> inventory.v1.WatchedLog + 47, // 104: agent.v1.SetStateRequest.BuiltinAgentsEntry.value:type_name -> agent.v1.SetStateRequest.BuiltinAgent + 11, // 105: agent.v1.QueryActionMap.MapEntry.value:type_name -> agent.v1.QueryActionValue + 0, // 106: agent.v1.StartActionRequest.MySQLExplainParams.output_format:type_name -> agent.v1.MysqlExplainOutputFormat + 2, // 107: agent.v1.StartActionRequest.MySQLExplainParams.tls_files:type_name -> agent.v1.TextFiles + 2, // 108: agent.v1.StartActionRequest.MySQLShowCreateTableParams.tls_files:type_name -> agent.v1.TextFiles + 2, // 109: agent.v1.StartActionRequest.MySQLShowTableStatusParams.tls_files:type_name -> agent.v1.TextFiles + 2, // 110: agent.v1.StartActionRequest.MySQLShowIndexParams.tls_files:type_name -> agent.v1.TextFiles + 2, // 111: agent.v1.StartActionRequest.PostgreSQLShowCreateTableParams.tls_files:type_name -> agent.v1.TextFiles + 2, // 112: agent.v1.StartActionRequest.PostgreSQLShowIndexParams.tls_files:type_name -> agent.v1.TextFiles + 2, // 113: agent.v1.StartActionRequest.MongoDBExplainParams.text_files:type_name -> agent.v1.TextFiles + 2, // 114: agent.v1.StartActionRequest.MySQLQueryShowParams.tls_files:type_name -> agent.v1.TextFiles + 2, // 115: agent.v1.StartActionRequest.MySQLQuerySelectParams.tls_files:type_name -> agent.v1.TextFiles + 2, // 116: agent.v1.StartActionRequest.PostgreSQLQueryShowParams.tls_files:type_name -> agent.v1.TextFiles + 2, // 117: agent.v1.StartActionRequest.PostgreSQLQuerySelectParams.tls_files:type_name -> agent.v1.TextFiles + 2, // 118: agent.v1.StartActionRequest.MongoDBQueryGetParameterParams.text_files:type_name -> agent.v1.TextFiles + 2, // 119: agent.v1.StartActionRequest.MongoDBQueryBuildInfoParams.text_files:type_name -> agent.v1.TextFiles + 2, // 120: agent.v1.StartActionRequest.MongoDBQueryGetCmdLineOptsParams.text_files:type_name -> agent.v1.TextFiles + 2, // 121: agent.v1.StartActionRequest.MongoDBQueryReplSetGetStatusParams.text_files:type_name -> agent.v1.TextFiles + 2, // 122: agent.v1.StartActionRequest.MongoDBQueryGetDiagnosticDataParams.text_files:type_name -> agent.v1.TextFiles + 1, // 123: agent.v1.StartActionRequest.RestartSystemServiceParams.system_service:type_name -> agent.v1.StartActionRequest.RestartSystemServiceParams.SystemService + 32, // 124: agent.v1.StartJobRequest.MySQLBackup.s3_config:type_name -> agent.v1.S3LocationConfig + 32, // 125: agent.v1.StartJobRequest.MySQLRestoreBackup.s3_config:type_name -> agent.v1.S3LocationConfig + 2, // 126: agent.v1.StartJobRequest.MongoDBBackup.text_files:type_name -> agent.v1.TextFiles + 103, // 127: agent.v1.StartJobRequest.MongoDBBackup.data_model:type_name -> backup.v1.DataModel + 32, // 128: agent.v1.StartJobRequest.MongoDBBackup.s3_config:type_name -> agent.v1.S3LocationConfig + 33, // 129: agent.v1.StartJobRequest.MongoDBBackup.filesystem_config:type_name -> agent.v1.FilesystemLocationConfig + 2, // 130: agent.v1.StartJobRequest.MongoDBRestoreBackup.text_files:type_name -> agent.v1.TextFiles + 104, // 131: agent.v1.StartJobRequest.MongoDBRestoreBackup.pbm_metadata:type_name -> backup.v1.PbmMetadata + 94, // 132: agent.v1.StartJobRequest.MongoDBRestoreBackup.pitr_timestamp:type_name -> google.protobuf.Timestamp + 32, // 133: agent.v1.StartJobRequest.MongoDBRestoreBackup.s3_config:type_name -> agent.v1.S3LocationConfig + 33, // 134: agent.v1.StartJobRequest.MongoDBRestoreBackup.filesystem_config:type_name -> agent.v1.FilesystemLocationConfig + 105, // 135: agent.v1.JobResult.MongoDBBackup.metadata:type_name -> backup.v1.Metadata + 105, // 136: agent.v1.JobResult.MySQLBackup.metadata:type_name -> backup.v1.Metadata + 86, // 137: agent.v1.GetVersionsRequest.Software.mysqld:type_name -> agent.v1.GetVersionsRequest.MySQLd + 87, // 138: agent.v1.GetVersionsRequest.Software.xtrabackup:type_name -> agent.v1.GetVersionsRequest.Xtrabackup + 88, // 139: agent.v1.GetVersionsRequest.Software.xbcloud:type_name -> agent.v1.GetVersionsRequest.Xbcloud + 89, // 140: agent.v1.GetVersionsRequest.Software.qpress:type_name -> agent.v1.GetVersionsRequest.Qpress + 90, // 141: agent.v1.GetVersionsRequest.Software.mongod:type_name -> agent.v1.GetVersionsRequest.MongoDB + 91, // 142: agent.v1.GetVersionsRequest.Software.pbm:type_name -> agent.v1.GetVersionsRequest.PBM + 42, // 143: agent.v1.AgentService.Connect:input_type -> agent.v1.AgentMessage + 43, // 144: agent.v1.AgentService.Connect:output_type -> agent.v1.ServerMessage + 144, // [144:145] is the sub-list for method output_type + 143, // [143:144] is the sub-list for method input_type + 143, // [143:143] is the sub-list for extension type_name + 143, // [143:143] is the sub-list for extension extendee + 0, // [0:143] is the sub-list for field type_name } func init() { file_agent_v1_agent_proto_init() } diff --git a/api/agent/v1/agent.pb.validate.go b/api/agent/v1/agent.pb.validate.go index b5a18f68749..e3eaab8937e 100644 --- a/api/agent/v1/agent.pb.validate.go +++ b/api/agent/v1/agent.pb.validate.go @@ -19,6 +19,7 @@ import ( "google.golang.org/protobuf/types/known/anypb" backupv1 "github.com/percona/pmm/api/backup/v1" + inventoryv1 "github.com/percona/pmm/api/inventory/v1" ) @@ -134,8 +135,7 @@ func (e TextFilesValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = TextFilesValidationError{} @@ -233,8 +233,7 @@ func (e PingValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = PingValidationError{} @@ -361,8 +360,7 @@ func (e PongValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = PongValidationError{} @@ -498,8 +496,7 @@ func (e QANCollectRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = QANCollectRequestValidationError{} @@ -601,8 +598,7 @@ func (e QANCollectResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = QANCollectResponseValidationError{} @@ -714,8 +710,7 @@ func (e StateChangedRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StateChangedRequestValidationError{} @@ -817,8 +812,7 @@ func (e StateChangedResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StateChangedResponseValidationError{} @@ -1010,8 +1004,7 @@ func (e SetStateRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = SetStateRequestValidationError{} @@ -1111,8 +1104,7 @@ func (e SetStateResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = SetStateResponseValidationError{} @@ -1453,8 +1445,7 @@ func (e QueryActionValueValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = QueryActionValueValidationError{} @@ -1588,8 +1579,7 @@ func (e QueryActionSliceValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = QueryActionSliceValidationError{} @@ -1735,8 +1725,7 @@ func (e QueryActionMapValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = QueryActionMapValidationError{} @@ -1842,8 +1831,7 @@ func (e QueryActionBinaryValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = QueryActionBinaryValidationError{} @@ -2013,8 +2001,7 @@ func (e QueryActionResultValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = QueryActionResultValidationError{} @@ -3013,8 +3000,7 @@ func (e StartActionRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequestValidationError{} @@ -3116,8 +3102,7 @@ func (e StartActionResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionResponseValidationError{} @@ -3221,8 +3206,7 @@ func (e StopActionRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StopActionRequestValidationError{} @@ -3324,8 +3308,7 @@ func (e StopActionResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StopActionResponseValidationError{} @@ -3435,8 +3418,7 @@ func (e ActionResultRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ActionResultRequestValidationError{} @@ -3538,8 +3520,7 @@ func (e ActionResultResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ActionResultResponseValidationError{} @@ -3674,8 +3655,7 @@ func (e PBMSwitchPITRRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = PBMSwitchPITRRequestValidationError{} @@ -3779,8 +3759,7 @@ func (e PBMSwitchPITRResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = PBMSwitchPITRResponseValidationError{} @@ -3884,8 +3863,7 @@ func (e AgentLogsRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AgentLogsRequestValidationError{} @@ -3989,8 +3967,7 @@ func (e AgentLogsResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AgentLogsResponseValidationError{} @@ -4158,8 +4135,7 @@ func (e CheckConnectionRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = CheckConnectionRequestValidationError{} @@ -4263,8 +4239,7 @@ func (e CheckConnectionResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = CheckConnectionResponseValidationError{} @@ -4432,8 +4407,7 @@ func (e ServiceInfoRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ServiceInfoRequestValidationError{} @@ -4545,8 +4519,7 @@ func (e ServiceInfoResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ServiceInfoResponseValidationError{} @@ -4648,8 +4621,7 @@ func (e JobStatusRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = JobStatusRequestValidationError{} @@ -4753,8 +4725,7 @@ func (e JobStatusResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = JobStatusResponseValidationError{} @@ -4864,8 +4835,7 @@ func (e S3LocationConfigValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = S3LocationConfigValidationError{} @@ -4969,8 +4939,7 @@ func (e FilesystemLocationConfigValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = FilesystemLocationConfigValidationError{} @@ -5270,8 +5239,7 @@ func (e StartJobRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartJobRequestValidationError{} @@ -5373,8 +5341,7 @@ func (e StartJobResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartJobResponseValidationError{} @@ -5476,8 +5443,7 @@ func (e StopJobRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StopJobRequestValidationError{} @@ -5577,8 +5543,7 @@ func (e StopJobResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StopJobResponseValidationError{} @@ -5918,8 +5883,7 @@ func (e JobResultValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = JobResultValidationError{} @@ -6177,8 +6141,7 @@ func (e JobProgressValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = JobProgressValidationError{} @@ -6314,8 +6277,7 @@ func (e GetVersionsRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetVersionsRequestValidationError{} @@ -6451,8 +6413,7 @@ func (e GetVersionsResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetVersionsResponseValidationError{} @@ -7325,8 +7286,7 @@ func (e AgentMessageValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AgentMessageValidationError{} @@ -8118,8 +8078,7 @@ func (e ServerMessageValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ServerMessageValidationError{} @@ -8230,8 +8189,7 @@ func (e SetStateRequest_AgentProcessValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = SetStateRequest_AgentProcessValidationError{} @@ -8346,6 +8304,42 @@ func (m *SetStateRequest_BuiltinAgent) validate(all bool) error { // no validation rules for ServiceName + for idx, item := range m.GetWatchedLogs() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SetStateRequest_BuiltinAgentValidationError{ + field: fmt.Sprintf("WatchedLogs[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SetStateRequest_BuiltinAgentValidationError{ + field: fmt.Sprintf("WatchedLogs[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetStateRequest_BuiltinAgentValidationError{ + field: fmt.Sprintf("WatchedLogs[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for DbSystem + if len(errors) > 0 { return SetStateRequest_BuiltinAgentMultiError(errors) } @@ -8414,8 +8408,7 @@ func (e SetStateRequest_BuiltinAgentValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = SetStateRequest_BuiltinAgentValidationError{} @@ -8559,8 +8552,7 @@ func (e StartActionRequest_MySQLExplainParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_MySQLExplainParamsValidationError{} @@ -8704,8 +8696,7 @@ func (e StartActionRequest_MySQLShowCreateTableParamsValidationError) Error() st key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_MySQLShowCreateTableParamsValidationError{} @@ -8849,8 +8840,7 @@ func (e StartActionRequest_MySQLShowTableStatusParamsValidationError) Error() st key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_MySQLShowTableStatusParamsValidationError{} @@ -8991,8 +8981,7 @@ func (e StartActionRequest_MySQLShowIndexParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_MySQLShowIndexParamsValidationError{} @@ -9141,8 +9130,7 @@ func (e StartActionRequest_PostgreSQLShowCreateTableParamsValidationError) Error key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_PostgreSQLShowCreateTableParamsValidationError{} @@ -9284,8 +9272,7 @@ func (e StartActionRequest_PostgreSQLShowIndexParamsValidationError) Error() str key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_PostgreSQLShowIndexParamsValidationError{} @@ -9424,8 +9411,7 @@ func (e StartActionRequest_MongoDBExplainParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_MongoDBExplainParamsValidationError{} @@ -9530,8 +9516,7 @@ func (e StartActionRequest_PTSummaryParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_PTSummaryParamsValidationError{} @@ -9644,8 +9629,7 @@ func (e StartActionRequest_PTPgSummaryParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_PTPgSummaryParamsValidationError{} @@ -9759,8 +9743,7 @@ func (e StartActionRequest_PTMongoDBSummaryParamsValidationError) Error() string key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_PTMongoDBSummaryParamsValidationError{} @@ -9876,8 +9859,7 @@ func (e StartActionRequest_PTMySQLSummaryParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_PTMySQLSummaryParamsValidationError{} @@ -10018,8 +10000,7 @@ func (e StartActionRequest_MySQLQueryShowParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_MySQLQueryShowParamsValidationError{} @@ -10160,8 +10141,7 @@ func (e StartActionRequest_MySQLQuerySelectParamsValidationError) Error() string key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_MySQLQuerySelectParamsValidationError{} @@ -10301,8 +10281,7 @@ func (e StartActionRequest_PostgreSQLQueryShowParamsValidationError) Error() str key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_PostgreSQLQueryShowParamsValidationError{} @@ -10446,8 +10425,7 @@ func (e StartActionRequest_PostgreSQLQuerySelectParamsValidationError) Error() s key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_PostgreSQLQuerySelectParamsValidationError{} @@ -10591,8 +10569,7 @@ func (e StartActionRequest_MongoDBQueryGetParameterParamsValidationError) Error( key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_MongoDBQueryGetParameterParamsValidationError{} @@ -10732,8 +10709,7 @@ func (e StartActionRequest_MongoDBQueryBuildInfoParamsValidationError) Error() s key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_MongoDBQueryBuildInfoParamsValidationError{} @@ -10878,8 +10854,7 @@ func (e StartActionRequest_MongoDBQueryGetCmdLineOptsParamsValidationError) Erro key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_MongoDBQueryGetCmdLineOptsParamsValidationError{} @@ -11028,8 +11003,7 @@ func (e StartActionRequest_MongoDBQueryReplSetGetStatusParamsValidationError) Er key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_MongoDBQueryReplSetGetStatusParamsValidationError{} @@ -11178,8 +11152,7 @@ func (e StartActionRequest_MongoDBQueryGetDiagnosticDataParamsValidationError) E key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_MongoDBQueryGetDiagnosticDataParamsValidationError{} @@ -11290,8 +11263,7 @@ func (e StartActionRequest_RestartSystemServiceParamsValidationError) Error() st key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartActionRequest_RestartSystemServiceParamsValidationError{} @@ -11396,8 +11368,7 @@ func (e CheckConnectionResponse_StatsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = CheckConnectionResponse_StatsValidationError{} @@ -11560,8 +11531,7 @@ func (e StartJobRequest_MySQLBackupValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartJobRequest_MySQLBackupValidationError{} @@ -11718,8 +11688,7 @@ func (e StartJobRequest_MySQLRestoreBackupValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartJobRequest_MySQLRestoreBackupValidationError{} @@ -11948,8 +11917,7 @@ func (e StartJobRequest_MongoDBBackupValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartJobRequest_MongoDBBackupValidationError{} @@ -12234,8 +12202,7 @@ func (e StartJobRequest_MongoDBRestoreBackupValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartJobRequest_MongoDBRestoreBackupValidationError{} @@ -12337,8 +12304,7 @@ func (e JobResult_ErrorValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = JobResult_ErrorValidationError{} @@ -12471,8 +12437,7 @@ func (e JobResult_MongoDBBackupValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = JobResult_MongoDBBackupValidationError{} @@ -12603,8 +12568,7 @@ func (e JobResult_MySQLBackupValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = JobResult_MySQLBackupValidationError{} @@ -12707,8 +12671,7 @@ func (e JobResult_MySQLRestoreBackupValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = JobResult_MySQLRestoreBackupValidationError{} @@ -12811,8 +12774,7 @@ func (e JobResult_MongoDBRestoreBackupValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = JobResult_MongoDBRestoreBackupValidationError{} @@ -12914,8 +12876,7 @@ func (e JobProgress_MySQLBackupValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = JobProgress_MySQLBackupValidationError{} @@ -13018,8 +12979,7 @@ func (e JobProgress_MySQLRestoreBackupValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = JobProgress_MySQLRestoreBackupValidationError{} @@ -13125,8 +13085,7 @@ func (e JobProgress_LogsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = JobProgress_LogsValidationError{} @@ -13228,8 +13187,7 @@ func (e GetVersionsRequest_MySQLdValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetVersionsRequest_MySQLdValidationError{} @@ -13332,8 +13290,7 @@ func (e GetVersionsRequest_XtrabackupValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetVersionsRequest_XtrabackupValidationError{} @@ -13435,8 +13392,7 @@ func (e GetVersionsRequest_XbcloudValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetVersionsRequest_XbcloudValidationError{} @@ -13538,8 +13494,7 @@ func (e GetVersionsRequest_QpressValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetVersionsRequest_QpressValidationError{} @@ -13641,8 +13596,7 @@ func (e GetVersionsRequest_MongoDBValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetVersionsRequest_MongoDBValidationError{} @@ -13744,8 +13698,7 @@ func (e GetVersionsRequest_PBMValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetVersionsRequest_PBMValidationError{} @@ -14099,8 +14052,7 @@ func (e GetVersionsRequest_SoftwareValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetVersionsRequest_SoftwareValidationError{} @@ -14207,8 +14159,7 @@ func (e GetVersionsResponse_VersionValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetVersionsResponse_VersionValidationError{} diff --git a/api/agent/v1/agent.proto b/api/agent/v1/agent.proto index a2f7636f7fd..939c2396db0 100644 --- a/api/agent/v1/agent.proto +++ b/api/agent/v1/agent.proto @@ -93,6 +93,10 @@ message SetStateRequest { // Service name of the service where the agent connects to. // Currently used by Real-Time Analytics built-in agent only. string service_name = 13; + // Database log files to watch and ship. Used by the database log-watcher agent only. + repeated inventory.v1.WatchedLog watched_logs = 14; + // Database engine of the watched service (mysql, postgresql, ...). Used by the log-watcher agent only. + string db_system = 15; } map builtin_agents = 2; } diff --git a/api/descriptor.bin b/api/descriptor.bin index 54cc4aa3868520a5ea46ec96ef4325c890a33c0b..2455a0f32cd0e6e62ad852efd2f2246b7fb5343b 100644 GIT binary patch delta 92211 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

>Tv0L*v1C<0-=Q#6<;_#Qb~5yh~Kg70xI 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 I&$a#k0Dk^*O#lD@ diff --git a/api/inventory/v1/agents.go b/api/inventory/v1/agents.go index d601b1784c7..1b20caf0d3a 100644 --- a/api/inventory/v1/agents.go +++ b/api/inventory/v1/agents.go @@ -44,3 +44,4 @@ func (*ExternalExporter) sealedAgent() {} func (*AzureDatabaseExporter) sealedAgent() {} func (*ValkeyExporter) sealedAgent() {} func (*RTAMongoDBAgent) sealedAgent() {} +func (*DBLogWatcherAgent) sealedAgent() {} diff --git a/api/inventory/v1/agents.pb.go b/api/inventory/v1/agents.pb.go index 3784fc8b7fc..9499976ff3c 100644 --- a/api/inventory/v1/agents.pb.go +++ b/api/inventory/v1/agents.pb.go @@ -7,19 +7,17 @@ package inventoryv1 import ( - reflect "reflect" - sync "sync" - unsafe "unsafe" - _ "github.com/envoyproxy/protoc-gen-validate/validate" _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" + common "github.com/percona/pmm/api/common" + _ "github.com/percona/pmm/api/extensions/v1" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" - - common "github.com/percona/pmm/api/common" - _ "github.com/percona/pmm/api/extensions/v1" + reflect "reflect" + sync "sync" + unsafe "unsafe" ) const ( @@ -53,6 +51,7 @@ const ( AgentType_AGENT_TYPE_AZURE_DATABASE_EXPORTER AgentType = 15 AgentType_AGENT_TYPE_NOMAD_AGENT AgentType = 16 AgentType_AGENT_TYPE_RTA_MONGODB_AGENT AgentType = 19 + AgentType_AGENT_TYPE_DB_LOG_WATCHER_AGENT AgentType = 20 ) // Enum value maps for AgentType. @@ -78,6 +77,7 @@ var ( 15: "AGENT_TYPE_AZURE_DATABASE_EXPORTER", 16: "AGENT_TYPE_NOMAD_AGENT", 19: "AGENT_TYPE_RTA_MONGODB_AGENT", + 20: "AGENT_TYPE_DB_LOG_WATCHER_AGENT", } AgentType_value = map[string]int32{ "AGENT_TYPE_UNSPECIFIED": 0, @@ -100,6 +100,7 @@ var ( "AGENT_TYPE_AZURE_DATABASE_EXPORTER": 15, "AGENT_TYPE_NOMAD_AGENT": 16, "AGENT_TYPE_RTA_MONGODB_AGENT": 19, + "AGENT_TYPE_DB_LOG_WATCHER_AGENT": 20, } ) @@ -130,6 +131,61 @@ func (AgentType) EnumDescriptor() ([]byte, []int) { return file_inventory_v1_agents_proto_rawDescGZIP(), []int{0} } +// WatchedLog identifies a single database log file to watch and its type. +type WatchedLog struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Absolute path of the log file on the client node. + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + // Log type: error, slow or general. + Type string `protobuf:"bytes,2,opt,name=type,proto3" json:"type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WatchedLog) Reset() { + *x = WatchedLog{} + mi := &file_inventory_v1_agents_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WatchedLog) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WatchedLog) ProtoMessage() {} + +func (x *WatchedLog) ProtoReflect() protoreflect.Message { + mi := &file_inventory_v1_agents_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WatchedLog.ProtoReflect.Descriptor instead. +func (*WatchedLog) Descriptor() ([]byte, []int) { + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{0} +} + +func (x *WatchedLog) GetPath() string { + if x != nil { + return x.Path + } + return "" +} + +func (x *WatchedLog) GetType() string { + if x != nil { + return x.Type + } + return "" +} + // PMMAgent runs on Generic or Container Node. type PMMAgent struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -149,7 +205,7 @@ type PMMAgent struct { func (x *PMMAgent) Reset() { *x = PMMAgent{} - mi := &file_inventory_v1_agents_proto_msgTypes[0] + mi := &file_inventory_v1_agents_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -161,7 +217,7 @@ func (x *PMMAgent) String() string { func (*PMMAgent) ProtoMessage() {} func (x *PMMAgent) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[0] + mi := &file_inventory_v1_agents_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -174,7 +230,7 @@ func (x *PMMAgent) ProtoReflect() protoreflect.Message { // Deprecated: Use PMMAgent.ProtoReflect.Descriptor instead. func (*PMMAgent) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{0} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{1} } func (x *PMMAgent) GetAgentId() string { @@ -233,7 +289,7 @@ type VMAgent struct { func (x *VMAgent) Reset() { *x = VMAgent{} - mi := &file_inventory_v1_agents_proto_msgTypes[1] + mi := &file_inventory_v1_agents_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -245,7 +301,7 @@ func (x *VMAgent) String() string { func (*VMAgent) ProtoMessage() {} func (x *VMAgent) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[1] + mi := &file_inventory_v1_agents_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -258,7 +314,7 @@ func (x *VMAgent) ProtoReflect() protoreflect.Message { // Deprecated: Use VMAgent.ProtoReflect.Descriptor instead. func (*VMAgent) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{1} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{2} } func (x *VMAgent) GetAgentId() string { @@ -316,7 +372,7 @@ type NomadAgent struct { func (x *NomadAgent) Reset() { *x = NomadAgent{} - mi := &file_inventory_v1_agents_proto_msgTypes[2] + mi := &file_inventory_v1_agents_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -328,7 +384,7 @@ func (x *NomadAgent) String() string { func (*NomadAgent) ProtoMessage() {} func (x *NomadAgent) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[2] + mi := &file_inventory_v1_agents_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -341,7 +397,7 @@ func (x *NomadAgent) ProtoReflect() protoreflect.Message { // Deprecated: Use NomadAgent.ProtoReflect.Descriptor instead. func (*NomadAgent) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{2} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{3} } func (x *NomadAgent) GetAgentId() string { @@ -419,7 +475,7 @@ type NodeExporter struct { func (x *NodeExporter) Reset() { *x = NodeExporter{} - mi := &file_inventory_v1_agents_proto_msgTypes[3] + mi := &file_inventory_v1_agents_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -431,7 +487,7 @@ func (x *NodeExporter) String() string { func (*NodeExporter) ProtoMessage() {} func (x *NodeExporter) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[3] + mi := &file_inventory_v1_agents_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -444,7 +500,7 @@ func (x *NodeExporter) ProtoReflect() protoreflect.Message { // Deprecated: Use NodeExporter.ProtoReflect.Descriptor instead. func (*NodeExporter) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{3} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{4} } func (x *NodeExporter) GetAgentId() string { @@ -590,7 +646,7 @@ type MySQLdExporter struct { func (x *MySQLdExporter) Reset() { *x = MySQLdExporter{} - mi := &file_inventory_v1_agents_proto_msgTypes[4] + mi := &file_inventory_v1_agents_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -602,7 +658,7 @@ func (x *MySQLdExporter) String() string { func (*MySQLdExporter) ProtoMessage() {} func (x *MySQLdExporter) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[4] + mi := &file_inventory_v1_agents_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -615,7 +671,7 @@ func (x *MySQLdExporter) ProtoReflect() protoreflect.Message { // Deprecated: Use MySQLdExporter.ProtoReflect.Descriptor instead. func (*MySQLdExporter) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{4} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{5} } func (x *MySQLdExporter) GetAgentId() string { @@ -838,7 +894,7 @@ type MongoDBExporter struct { func (x *MongoDBExporter) Reset() { *x = MongoDBExporter{} - mi := &file_inventory_v1_agents_proto_msgTypes[5] + mi := &file_inventory_v1_agents_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -850,7 +906,7 @@ func (x *MongoDBExporter) String() string { func (*MongoDBExporter) ProtoMessage() {} func (x *MongoDBExporter) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[5] + mi := &file_inventory_v1_agents_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -863,7 +919,7 @@ func (x *MongoDBExporter) ProtoReflect() protoreflect.Message { // Deprecated: Use MongoDBExporter.ProtoReflect.Descriptor instead. func (*MongoDBExporter) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{5} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{6} } func (x *MongoDBExporter) GetAgentId() string { @@ -1060,7 +1116,7 @@ type PostgresExporter struct { func (x *PostgresExporter) Reset() { *x = PostgresExporter{} - mi := &file_inventory_v1_agents_proto_msgTypes[6] + mi := &file_inventory_v1_agents_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1072,7 +1128,7 @@ func (x *PostgresExporter) String() string { func (*PostgresExporter) ProtoMessage() {} func (x *PostgresExporter) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[6] + mi := &file_inventory_v1_agents_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1085,7 +1141,7 @@ func (x *PostgresExporter) ProtoReflect() protoreflect.Message { // Deprecated: Use PostgresExporter.ProtoReflect.Descriptor instead. func (*PostgresExporter) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{6} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{7} } func (x *PostgresExporter) GetAgentId() string { @@ -1264,7 +1320,7 @@ type ProxySQLExporter struct { func (x *ProxySQLExporter) Reset() { *x = ProxySQLExporter{} - mi := &file_inventory_v1_agents_proto_msgTypes[7] + mi := &file_inventory_v1_agents_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1276,7 +1332,7 @@ func (x *ProxySQLExporter) String() string { func (*ProxySQLExporter) ProtoMessage() {} func (x *ProxySQLExporter) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[7] + mi := &file_inventory_v1_agents_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1289,7 +1345,7 @@ func (x *ProxySQLExporter) ProtoReflect() protoreflect.Message { // Deprecated: Use ProxySQLExporter.ProtoReflect.Descriptor instead. func (*ProxySQLExporter) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{7} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{8} } func (x *ProxySQLExporter) GetAgentId() string { @@ -1452,7 +1508,7 @@ type ValkeyExporter struct { func (x *ValkeyExporter) Reset() { *x = ValkeyExporter{} - mi := &file_inventory_v1_agents_proto_msgTypes[8] + mi := &file_inventory_v1_agents_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1464,7 +1520,7 @@ func (x *ValkeyExporter) String() string { func (*ValkeyExporter) ProtoMessage() {} func (x *ValkeyExporter) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[8] + mi := &file_inventory_v1_agents_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1477,7 +1533,7 @@ func (x *ValkeyExporter) ProtoReflect() protoreflect.Message { // Deprecated: Use ValkeyExporter.ProtoReflect.Descriptor instead. func (*ValkeyExporter) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{8} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{9} } func (x *ValkeyExporter) GetAgentId() string { @@ -1637,7 +1693,7 @@ type QANMySQLPerfSchemaAgent struct { func (x *QANMySQLPerfSchemaAgent) Reset() { *x = QANMySQLPerfSchemaAgent{} - mi := &file_inventory_v1_agents_proto_msgTypes[9] + mi := &file_inventory_v1_agents_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1649,7 +1705,7 @@ func (x *QANMySQLPerfSchemaAgent) String() string { func (*QANMySQLPerfSchemaAgent) ProtoMessage() {} func (x *QANMySQLPerfSchemaAgent) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[9] + mi := &file_inventory_v1_agents_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1662,7 +1718,7 @@ func (x *QANMySQLPerfSchemaAgent) ProtoReflect() protoreflect.Message { // Deprecated: Use QANMySQLPerfSchemaAgent.ProtoReflect.Descriptor instead. func (*QANMySQLPerfSchemaAgent) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{9} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{10} } func (x *QANMySQLPerfSchemaAgent) GetAgentId() string { @@ -1838,7 +1894,7 @@ type QANMySQLSlowlogAgent struct { func (x *QANMySQLSlowlogAgent) Reset() { *x = QANMySQLSlowlogAgent{} - mi := &file_inventory_v1_agents_proto_msgTypes[10] + mi := &file_inventory_v1_agents_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1850,7 +1906,7 @@ func (x *QANMySQLSlowlogAgent) String() string { func (*QANMySQLSlowlogAgent) ProtoMessage() {} func (x *QANMySQLSlowlogAgent) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[10] + mi := &file_inventory_v1_agents_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1863,7 +1919,7 @@ func (x *QANMySQLSlowlogAgent) ProtoReflect() protoreflect.Message { // Deprecated: Use QANMySQLSlowlogAgent.ProtoReflect.Descriptor instead. func (*QANMySQLSlowlogAgent) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{10} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{11} } func (x *QANMySQLSlowlogAgent) GetAgentId() string { @@ -1999,6 +2055,132 @@ func (x *QANMySQLSlowlogAgent) GetExtraDsnParams() map[string]string { return nil } +// DBLogWatcherAgent runs within pmm-agent and ships watched database log files to the PMM Server. +type DBLogWatcherAgent struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Unique randomly generated instance identifier. + AgentId string `protobuf:"bytes,1,opt,name=agent_id,json=agentId,proto3" json:"agent_id,omitempty"` + // The pmm-agent identifier which runs this instance. + PmmAgentId string `protobuf:"bytes,2,opt,name=pmm_agent_id,json=pmmAgentId,proto3" json:"pmm_agent_id,omitempty"` + // Desired Agent status: enabled (false) or disabled (true). + Disabled bool `protobuf:"varint,3,opt,name=disabled,proto3" json:"disabled,omitempty"` + // Service identifier. + ServiceId string `protobuf:"bytes,4,opt,name=service_id,json=serviceId,proto3" json:"service_id,omitempty"` + // Database engine: mysql, postgresql, mongodb, valkey or redis. + DbSystem string `protobuf:"bytes,5,opt,name=db_system,json=dbSystem,proto3" json:"db_system,omitempty"` + // Log files being watched and shipped. + WatchedLogs []*WatchedLog `protobuf:"bytes,6,rep,name=watched_logs,json=watchedLogs,proto3" json:"watched_logs,omitempty"` + // Custom user-assigned labels. + CustomLabels map[string]string `protobuf:"bytes,7,rep,name=custom_labels,json=customLabels,proto3" json:"custom_labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Actual Agent status. + Status AgentStatus `protobuf:"varint,20,opt,name=status,proto3,enum=inventory.v1.AgentStatus" json:"status,omitempty"` + ProcessExecPath string `protobuf:"bytes,21,opt,name=process_exec_path,json=processExecPath,proto3" json:"process_exec_path,omitempty"` + // Log level for the agent. + LogLevel LogLevel `protobuf:"varint,22,opt,name=log_level,json=logLevel,proto3,enum=inventory.v1.LogLevel" json:"log_level,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DBLogWatcherAgent) Reset() { + *x = DBLogWatcherAgent{} + mi := &file_inventory_v1_agents_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DBLogWatcherAgent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DBLogWatcherAgent) ProtoMessage() {} + +func (x *DBLogWatcherAgent) ProtoReflect() protoreflect.Message { + mi := &file_inventory_v1_agents_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DBLogWatcherAgent.ProtoReflect.Descriptor instead. +func (*DBLogWatcherAgent) Descriptor() ([]byte, []int) { + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{12} +} + +func (x *DBLogWatcherAgent) GetAgentId() string { + if x != nil { + return x.AgentId + } + return "" +} + +func (x *DBLogWatcherAgent) GetPmmAgentId() string { + if x != nil { + return x.PmmAgentId + } + return "" +} + +func (x *DBLogWatcherAgent) GetDisabled() bool { + if x != nil { + return x.Disabled + } + return false +} + +func (x *DBLogWatcherAgent) GetServiceId() string { + if x != nil { + return x.ServiceId + } + return "" +} + +func (x *DBLogWatcherAgent) GetDbSystem() string { + if x != nil { + return x.DbSystem + } + return "" +} + +func (x *DBLogWatcherAgent) GetWatchedLogs() []*WatchedLog { + if x != nil { + return x.WatchedLogs + } + return nil +} + +func (x *DBLogWatcherAgent) GetCustomLabels() map[string]string { + if x != nil { + return x.CustomLabels + } + return nil +} + +func (x *DBLogWatcherAgent) GetStatus() AgentStatus { + if x != nil { + return x.Status + } + return AgentStatus_AGENT_STATUS_UNSPECIFIED +} + +func (x *DBLogWatcherAgent) GetProcessExecPath() string { + if x != nil { + return x.ProcessExecPath + } + return "" +} + +func (x *DBLogWatcherAgent) GetLogLevel() LogLevel { + if x != nil { + return x.LogLevel + } + return LogLevel_LOG_LEVEL_UNSPECIFIED +} + // QANMongoDBProfilerAgent runs within pmm-agent and sends MongoDB Query Analytics data to the PMM Server. type QANMongoDBProfilerAgent struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -2032,7 +2214,7 @@ type QANMongoDBProfilerAgent struct { func (x *QANMongoDBProfilerAgent) Reset() { *x = QANMongoDBProfilerAgent{} - mi := &file_inventory_v1_agents_proto_msgTypes[11] + mi := &file_inventory_v1_agents_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2044,7 +2226,7 @@ func (x *QANMongoDBProfilerAgent) String() string { func (*QANMongoDBProfilerAgent) ProtoMessage() {} func (x *QANMongoDBProfilerAgent) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[11] + mi := &file_inventory_v1_agents_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2057,7 +2239,7 @@ func (x *QANMongoDBProfilerAgent) ProtoReflect() protoreflect.Message { // Deprecated: Use QANMongoDBProfilerAgent.ProtoReflect.Descriptor instead. func (*QANMongoDBProfilerAgent) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{11} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{13} } func (x *QANMongoDBProfilerAgent) GetAgentId() string { @@ -2177,7 +2359,7 @@ type QANMongoDBMongologAgent struct { func (x *QANMongoDBMongologAgent) Reset() { *x = QANMongoDBMongologAgent{} - mi := &file_inventory_v1_agents_proto_msgTypes[12] + mi := &file_inventory_v1_agents_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2189,7 +2371,7 @@ func (x *QANMongoDBMongologAgent) String() string { func (*QANMongoDBMongologAgent) ProtoMessage() {} func (x *QANMongoDBMongologAgent) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[12] + mi := &file_inventory_v1_agents_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2202,7 +2384,7 @@ func (x *QANMongoDBMongologAgent) ProtoReflect() protoreflect.Message { // Deprecated: Use QANMongoDBMongologAgent.ProtoReflect.Descriptor instead. func (*QANMongoDBMongologAgent) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{12} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{14} } func (x *QANMongoDBMongologAgent) GetAgentId() string { @@ -2300,7 +2482,7 @@ type RTAOptions struct { func (x *RTAOptions) Reset() { *x = RTAOptions{} - mi := &file_inventory_v1_agents_proto_msgTypes[13] + mi := &file_inventory_v1_agents_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2312,7 +2494,7 @@ func (x *RTAOptions) String() string { func (*RTAOptions) ProtoMessage() {} func (x *RTAOptions) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[13] + mi := &file_inventory_v1_agents_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2325,7 +2507,7 @@ func (x *RTAOptions) ProtoReflect() protoreflect.Message { // Deprecated: Use RTAOptions.ProtoReflect.Descriptor instead. func (*RTAOptions) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{13} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{15} } func (x *RTAOptions) GetCollectInterval() *durationpb.Duration { @@ -2366,7 +2548,7 @@ type RTAMongoDBAgent struct { func (x *RTAMongoDBAgent) Reset() { *x = RTAMongoDBAgent{} - mi := &file_inventory_v1_agents_proto_msgTypes[14] + mi := &file_inventory_v1_agents_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2378,7 +2560,7 @@ func (x *RTAMongoDBAgent) String() string { func (*RTAMongoDBAgent) ProtoMessage() {} func (x *RTAMongoDBAgent) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[14] + mi := &file_inventory_v1_agents_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2391,7 +2573,7 @@ func (x *RTAMongoDBAgent) ProtoReflect() protoreflect.Message { // Deprecated: Use RTAMongoDBAgent.ProtoReflect.Descriptor instead. func (*RTAMongoDBAgent) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{14} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{16} } func (x *RTAMongoDBAgent) GetAgentId() string { @@ -2506,7 +2688,7 @@ type QANPostgreSQLPgStatementsAgent struct { func (x *QANPostgreSQLPgStatementsAgent) Reset() { *x = QANPostgreSQLPgStatementsAgent{} - mi := &file_inventory_v1_agents_proto_msgTypes[15] + mi := &file_inventory_v1_agents_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2518,7 +2700,7 @@ func (x *QANPostgreSQLPgStatementsAgent) String() string { func (*QANPostgreSQLPgStatementsAgent) ProtoMessage() {} func (x *QANPostgreSQLPgStatementsAgent) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[15] + mi := &file_inventory_v1_agents_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2531,7 +2713,7 @@ func (x *QANPostgreSQLPgStatementsAgent) ProtoReflect() protoreflect.Message { // Deprecated: Use QANPostgreSQLPgStatementsAgent.ProtoReflect.Descriptor instead. func (*QANPostgreSQLPgStatementsAgent) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{15} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{17} } func (x *QANPostgreSQLPgStatementsAgent) GetAgentId() string { @@ -2662,7 +2844,7 @@ type QANPostgreSQLPgStatMonitorAgent struct { func (x *QANPostgreSQLPgStatMonitorAgent) Reset() { *x = QANPostgreSQLPgStatMonitorAgent{} - mi := &file_inventory_v1_agents_proto_msgTypes[16] + mi := &file_inventory_v1_agents_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2674,7 +2856,7 @@ func (x *QANPostgreSQLPgStatMonitorAgent) String() string { func (*QANPostgreSQLPgStatMonitorAgent) ProtoMessage() {} func (x *QANPostgreSQLPgStatMonitorAgent) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[16] + mi := &file_inventory_v1_agents_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2687,7 +2869,7 @@ func (x *QANPostgreSQLPgStatMonitorAgent) ProtoReflect() protoreflect.Message { // Deprecated: Use QANPostgreSQLPgStatMonitorAgent.ProtoReflect.Descriptor instead. func (*QANPostgreSQLPgStatMonitorAgent) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{16} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{18} } func (x *QANPostgreSQLPgStatMonitorAgent) GetAgentId() string { @@ -2827,7 +3009,7 @@ type RDSExporter struct { func (x *RDSExporter) Reset() { *x = RDSExporter{} - mi := &file_inventory_v1_agents_proto_msgTypes[17] + mi := &file_inventory_v1_agents_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2839,7 +3021,7 @@ func (x *RDSExporter) String() string { func (*RDSExporter) ProtoMessage() {} func (x *RDSExporter) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[17] + mi := &file_inventory_v1_agents_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2852,7 +3034,7 @@ func (x *RDSExporter) ProtoReflect() protoreflect.Message { // Deprecated: Use RDSExporter.ProtoReflect.Descriptor instead. func (*RDSExporter) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{17} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{19} } func (x *RDSExporter) GetAgentId() string { @@ -2997,7 +3179,7 @@ type ExternalExporter struct { func (x *ExternalExporter) Reset() { *x = ExternalExporter{} - mi := &file_inventory_v1_agents_proto_msgTypes[18] + mi := &file_inventory_v1_agents_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3009,7 +3191,7 @@ func (x *ExternalExporter) String() string { func (*ExternalExporter) ProtoMessage() {} func (x *ExternalExporter) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[18] + mi := &file_inventory_v1_agents_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3022,7 +3204,7 @@ func (x *ExternalExporter) ProtoReflect() protoreflect.Message { // Deprecated: Use ExternalExporter.ProtoReflect.Descriptor instead. func (*ExternalExporter) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{18} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{20} } func (x *ExternalExporter) GetAgentId() string { @@ -3158,7 +3340,7 @@ type AzureDatabaseExporter struct { func (x *AzureDatabaseExporter) Reset() { *x = AzureDatabaseExporter{} - mi := &file_inventory_v1_agents_proto_msgTypes[19] + mi := &file_inventory_v1_agents_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3170,7 +3352,7 @@ func (x *AzureDatabaseExporter) String() string { func (*AzureDatabaseExporter) ProtoMessage() {} func (x *AzureDatabaseExporter) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[19] + mi := &file_inventory_v1_agents_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3183,7 +3365,7 @@ func (x *AzureDatabaseExporter) ProtoReflect() protoreflect.Message { // Deprecated: Use AzureDatabaseExporter.ProtoReflect.Descriptor instead. func (*AzureDatabaseExporter) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{19} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{21} } func (x *AzureDatabaseExporter) GetAgentId() string { @@ -3294,7 +3476,7 @@ type ChangeCommonAgentParams struct { func (x *ChangeCommonAgentParams) Reset() { *x = ChangeCommonAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[20] + mi := &file_inventory_v1_agents_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3306,7 +3488,7 @@ func (x *ChangeCommonAgentParams) String() string { func (*ChangeCommonAgentParams) ProtoMessage() {} func (x *ChangeCommonAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[20] + mi := &file_inventory_v1_agents_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3319,7 +3501,7 @@ func (x *ChangeCommonAgentParams) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeCommonAgentParams.ProtoReflect.Descriptor instead. func (*ChangeCommonAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{20} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{22} } func (x *ChangeCommonAgentParams) GetEnable() bool { @@ -3369,7 +3551,7 @@ type ListAgentsRequest struct { func (x *ListAgentsRequest) Reset() { *x = ListAgentsRequest{} - mi := &file_inventory_v1_agents_proto_msgTypes[21] + mi := &file_inventory_v1_agents_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3381,7 +3563,7 @@ func (x *ListAgentsRequest) String() string { func (*ListAgentsRequest) ProtoMessage() {} func (x *ListAgentsRequest) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[21] + mi := &file_inventory_v1_agents_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3394,7 +3576,7 @@ func (x *ListAgentsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAgentsRequest.ProtoReflect.Descriptor instead. func (*ListAgentsRequest) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{21} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{23} } func (x *ListAgentsRequest) GetPmmAgentId() string { @@ -3446,13 +3628,14 @@ type ListAgentsResponse struct { NomadAgent []*NomadAgent `protobuf:"bytes,16,rep,name=nomad_agent,json=nomadAgent,proto3" json:"nomad_agent,omitempty"` ValkeyExporter []*ValkeyExporter `protobuf:"bytes,17,rep,name=valkey_exporter,json=valkeyExporter,proto3" json:"valkey_exporter,omitempty"` RtaMongodbAgent []*RTAMongoDBAgent `protobuf:"bytes,19,rep,name=rta_mongodb_agent,json=rtaMongodbAgent,proto3" json:"rta_mongodb_agent,omitempty"` + DbLogWatcherAgent []*DBLogWatcherAgent `protobuf:"bytes,20,rep,name=db_log_watcher_agent,json=dbLogWatcherAgent,proto3" json:"db_log_watcher_agent,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ListAgentsResponse) Reset() { *x = ListAgentsResponse{} - mi := &file_inventory_v1_agents_proto_msgTypes[22] + mi := &file_inventory_v1_agents_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3464,7 +3647,7 @@ func (x *ListAgentsResponse) String() string { func (*ListAgentsResponse) ProtoMessage() {} func (x *ListAgentsResponse) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[22] + mi := &file_inventory_v1_agents_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3477,7 +3660,7 @@ func (x *ListAgentsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAgentsResponse.ProtoReflect.Descriptor instead. func (*ListAgentsResponse) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{22} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{24} } func (x *ListAgentsResponse) GetPmmAgent() []*PMMAgent { @@ -3613,6 +3796,13 @@ func (x *ListAgentsResponse) GetRtaMongodbAgent() []*RTAMongoDBAgent { return nil } +func (x *ListAgentsResponse) GetDbLogWatcherAgent() []*DBLogWatcherAgent { + if x != nil { + return x.DbLogWatcherAgent + } + return nil +} + type GetAgentRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // Unique randomly generated instance identifier. @@ -3623,7 +3813,7 @@ type GetAgentRequest struct { func (x *GetAgentRequest) Reset() { *x = GetAgentRequest{} - mi := &file_inventory_v1_agents_proto_msgTypes[23] + mi := &file_inventory_v1_agents_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3635,7 +3825,7 @@ func (x *GetAgentRequest) String() string { func (*GetAgentRequest) ProtoMessage() {} func (x *GetAgentRequest) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[23] + mi := &file_inventory_v1_agents_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3648,7 +3838,7 @@ func (x *GetAgentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgentRequest.ProtoReflect.Descriptor instead. func (*GetAgentRequest) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{23} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{25} } func (x *GetAgentRequest) GetAgentId() string { @@ -3681,6 +3871,7 @@ type GetAgentResponse struct { // *GetAgentResponse_NomadAgent // *GetAgentResponse_ValkeyExporter // *GetAgentResponse_RtaMongodbAgent + // *GetAgentResponse_DbLogWatcherAgent Agent isGetAgentResponse_Agent `protobuf_oneof:"agent"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -3688,7 +3879,7 @@ type GetAgentResponse struct { func (x *GetAgentResponse) Reset() { *x = GetAgentResponse{} - mi := &file_inventory_v1_agents_proto_msgTypes[24] + mi := &file_inventory_v1_agents_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3700,7 +3891,7 @@ func (x *GetAgentResponse) String() string { func (*GetAgentResponse) ProtoMessage() {} func (x *GetAgentResponse) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[24] + mi := &file_inventory_v1_agents_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3713,7 +3904,7 @@ func (x *GetAgentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgentResponse.ProtoReflect.Descriptor instead. func (*GetAgentResponse) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{24} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{26} } func (x *GetAgentResponse) GetAgent() isGetAgentResponse_Agent { @@ -3894,6 +4085,15 @@ func (x *GetAgentResponse) GetRtaMongodbAgent() *RTAMongoDBAgent { return nil } +func (x *GetAgentResponse) GetDbLogWatcherAgent() *DBLogWatcherAgent { + if x != nil { + if x, ok := x.Agent.(*GetAgentResponse_DbLogWatcherAgent); ok { + return x.DbLogWatcherAgent + } + } + return nil +} + type isGetAgentResponse_Agent interface { isGetAgentResponse_Agent() } @@ -3974,6 +4174,10 @@ type GetAgentResponse_RtaMongodbAgent struct { RtaMongodbAgent *RTAMongoDBAgent `protobuf:"bytes,19,opt,name=rta_mongodb_agent,json=rtaMongodbAgent,proto3,oneof"` } +type GetAgentResponse_DbLogWatcherAgent struct { + DbLogWatcherAgent *DBLogWatcherAgent `protobuf:"bytes,20,opt,name=db_log_watcher_agent,json=dbLogWatcherAgent,proto3,oneof"` +} + func (*GetAgentResponse_PmmAgent) isGetAgentResponse_Agent() {} func (*GetAgentResponse_Vmagent) isGetAgentResponse_Agent() {} @@ -4012,6 +4216,8 @@ func (*GetAgentResponse_ValkeyExporter) isGetAgentResponse_Agent() {} func (*GetAgentResponse_RtaMongodbAgent) isGetAgentResponse_Agent() {} +func (*GetAgentResponse_DbLogWatcherAgent) isGetAgentResponse_Agent() {} + type GetAgentLogsRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // Unique randomly generated instance identifier. @@ -4024,7 +4230,7 @@ type GetAgentLogsRequest struct { func (x *GetAgentLogsRequest) Reset() { *x = GetAgentLogsRequest{} - mi := &file_inventory_v1_agents_proto_msgTypes[25] + mi := &file_inventory_v1_agents_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4036,7 +4242,7 @@ func (x *GetAgentLogsRequest) String() string { func (*GetAgentLogsRequest) ProtoMessage() {} func (x *GetAgentLogsRequest) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[25] + mi := &file_inventory_v1_agents_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4049,7 +4255,7 @@ func (x *GetAgentLogsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgentLogsRequest.ProtoReflect.Descriptor instead. func (*GetAgentLogsRequest) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{25} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{27} } func (x *GetAgentLogsRequest) GetAgentId() string { @@ -4076,7 +4282,7 @@ type GetAgentLogsResponse struct { func (x *GetAgentLogsResponse) Reset() { *x = GetAgentLogsResponse{} - mi := &file_inventory_v1_agents_proto_msgTypes[26] + mi := &file_inventory_v1_agents_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4088,7 +4294,7 @@ func (x *GetAgentLogsResponse) String() string { func (*GetAgentLogsResponse) ProtoMessage() {} func (x *GetAgentLogsResponse) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[26] + mi := &file_inventory_v1_agents_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4101,7 +4307,7 @@ func (x *GetAgentLogsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgentLogsResponse.ProtoReflect.Descriptor instead. func (*GetAgentLogsResponse) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{26} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{28} } func (x *GetAgentLogsResponse) GetLogs() []string { @@ -4146,7 +4352,7 @@ type AddAgentRequest struct { func (x *AddAgentRequest) Reset() { *x = AddAgentRequest{} - mi := &file_inventory_v1_agents_proto_msgTypes[27] + mi := &file_inventory_v1_agents_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4158,7 +4364,7 @@ func (x *AddAgentRequest) String() string { func (*AddAgentRequest) ProtoMessage() {} func (x *AddAgentRequest) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[27] + mi := &file_inventory_v1_agents_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4171,7 +4377,7 @@ func (x *AddAgentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AddAgentRequest.ProtoReflect.Descriptor instead. func (*AddAgentRequest) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{27} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{29} } func (x *AddAgentRequest) GetAgent() isAddAgentRequest_Agent { @@ -4468,7 +4674,7 @@ type AddAgentResponse struct { func (x *AddAgentResponse) Reset() { *x = AddAgentResponse{} - mi := &file_inventory_v1_agents_proto_msgTypes[28] + mi := &file_inventory_v1_agents_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4480,7 +4686,7 @@ func (x *AddAgentResponse) String() string { func (*AddAgentResponse) ProtoMessage() {} func (x *AddAgentResponse) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[28] + mi := &file_inventory_v1_agents_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4493,7 +4699,7 @@ func (x *AddAgentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AddAgentResponse.ProtoReflect.Descriptor instead. func (*AddAgentResponse) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{28} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{30} } func (x *AddAgentResponse) GetAgent() isAddAgentResponse_Agent { @@ -4791,7 +4997,7 @@ type ChangeAgentRequest struct { func (x *ChangeAgentRequest) Reset() { *x = ChangeAgentRequest{} - mi := &file_inventory_v1_agents_proto_msgTypes[29] + mi := &file_inventory_v1_agents_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4803,7 +5009,7 @@ func (x *ChangeAgentRequest) String() string { func (*ChangeAgentRequest) ProtoMessage() {} func (x *ChangeAgentRequest) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[29] + mi := &file_inventory_v1_agents_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4816,7 +5022,7 @@ func (x *ChangeAgentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeAgentRequest.ProtoReflect.Descriptor instead. func (*ChangeAgentRequest) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{29} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{31} } func (x *ChangeAgentRequest) GetAgentId() string { @@ -5120,7 +5326,7 @@ type ChangeAgentResponse struct { func (x *ChangeAgentResponse) Reset() { *x = ChangeAgentResponse{} - mi := &file_inventory_v1_agents_proto_msgTypes[30] + mi := &file_inventory_v1_agents_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5132,7 +5338,7 @@ func (x *ChangeAgentResponse) String() string { func (*ChangeAgentResponse) ProtoMessage() {} func (x *ChangeAgentResponse) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[30] + mi := &file_inventory_v1_agents_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5145,7 +5351,7 @@ func (x *ChangeAgentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeAgentResponse.ProtoReflect.Descriptor instead. func (*ChangeAgentResponse) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{30} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{32} } func (x *ChangeAgentResponse) GetAgent() isChangeAgentResponse_Agent { @@ -5426,7 +5632,7 @@ type AddPMMAgentParams struct { func (x *AddPMMAgentParams) Reset() { *x = AddPMMAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[31] + mi := &file_inventory_v1_agents_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5438,7 +5644,7 @@ func (x *AddPMMAgentParams) String() string { func (*AddPMMAgentParams) ProtoMessage() {} func (x *AddPMMAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[31] + mi := &file_inventory_v1_agents_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5451,7 +5657,7 @@ func (x *AddPMMAgentParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddPMMAgentParams.ProtoReflect.Descriptor instead. func (*AddPMMAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{31} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{33} } func (x *AddPMMAgentParams) GetRunsOnNodeId() string { @@ -5488,7 +5694,7 @@ type AddNodeExporterParams struct { func (x *AddNodeExporterParams) Reset() { *x = AddNodeExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[32] + mi := &file_inventory_v1_agents_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5500,7 +5706,7 @@ func (x *AddNodeExporterParams) String() string { func (*AddNodeExporterParams) ProtoMessage() {} func (x *AddNodeExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[32] + mi := &file_inventory_v1_agents_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5513,7 +5719,7 @@ func (x *AddNodeExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddNodeExporterParams.ProtoReflect.Descriptor instead. func (*AddNodeExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{32} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{34} } func (x *AddNodeExporterParams) GetPmmAgentId() string { @@ -5580,7 +5786,7 @@ type ChangeNodeExporterParams struct { func (x *ChangeNodeExporterParams) Reset() { *x = ChangeNodeExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[33] + mi := &file_inventory_v1_agents_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5592,7 +5798,7 @@ func (x *ChangeNodeExporterParams) String() string { func (*ChangeNodeExporterParams) ProtoMessage() {} func (x *ChangeNodeExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[33] + mi := &file_inventory_v1_agents_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5605,7 +5811,7 @@ func (x *ChangeNodeExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeNodeExporterParams.ProtoReflect.Descriptor instead. func (*ChangeNodeExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{33} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{35} } func (x *ChangeNodeExporterParams) GetEnable() bool { @@ -5705,7 +5911,7 @@ type AddMySQLdExporterParams struct { func (x *AddMySQLdExporterParams) Reset() { *x = AddMySQLdExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[34] + mi := &file_inventory_v1_agents_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5717,7 +5923,7 @@ func (x *AddMySQLdExporterParams) String() string { func (*AddMySQLdExporterParams) ProtoMessage() {} func (x *AddMySQLdExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[34] + mi := &file_inventory_v1_agents_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5730,7 +5936,7 @@ func (x *AddMySQLdExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddMySQLdExporterParams.ProtoReflect.Descriptor instead. func (*AddMySQLdExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{34} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{36} } func (x *AddMySQLdExporterParams) GetPmmAgentId() string { @@ -5910,7 +6116,7 @@ type ChangeMySQLdExporterParams struct { func (x *ChangeMySQLdExporterParams) Reset() { *x = ChangeMySQLdExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[35] + mi := &file_inventory_v1_agents_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5922,7 +6128,7 @@ func (x *ChangeMySQLdExporterParams) String() string { func (*ChangeMySQLdExporterParams) ProtoMessage() {} func (x *ChangeMySQLdExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[35] + mi := &file_inventory_v1_agents_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5935,7 +6141,7 @@ func (x *ChangeMySQLdExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeMySQLdExporterParams.ProtoReflect.Descriptor instead. func (*ChangeMySQLdExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{35} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{37} } func (x *ChangeMySQLdExporterParams) GetEnable() bool { @@ -6122,7 +6328,7 @@ type AddMongoDBExporterParams struct { func (x *AddMongoDBExporterParams) Reset() { *x = AddMongoDBExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[36] + mi := &file_inventory_v1_agents_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6134,7 +6340,7 @@ func (x *AddMongoDBExporterParams) String() string { func (*AddMongoDBExporterParams) ProtoMessage() {} func (x *AddMongoDBExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[36] + mi := &file_inventory_v1_agents_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6147,7 +6353,7 @@ func (x *AddMongoDBExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddMongoDBExporterParams.ProtoReflect.Descriptor instead. func (*AddMongoDBExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{36} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{38} } func (x *AddMongoDBExporterParams) GetPmmAgentId() string { @@ -6363,7 +6569,7 @@ type ChangeMongoDBExporterParams struct { func (x *ChangeMongoDBExporterParams) Reset() { *x = ChangeMongoDBExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[37] + mi := &file_inventory_v1_agents_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6375,7 +6581,7 @@ func (x *ChangeMongoDBExporterParams) String() string { func (*ChangeMongoDBExporterParams) ProtoMessage() {} func (x *ChangeMongoDBExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[37] + mi := &file_inventory_v1_agents_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6388,7 +6594,7 @@ func (x *ChangeMongoDBExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeMongoDBExporterParams.ProtoReflect.Descriptor instead. func (*ChangeMongoDBExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{37} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{39} } func (x *ChangeMongoDBExporterParams) GetEnable() bool { @@ -6591,7 +6797,7 @@ type AddPostgresExporterParams struct { func (x *AddPostgresExporterParams) Reset() { *x = AddPostgresExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[38] + mi := &file_inventory_v1_agents_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6603,7 +6809,7 @@ func (x *AddPostgresExporterParams) String() string { func (*AddPostgresExporterParams) ProtoMessage() {} func (x *AddPostgresExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[38] + mi := &file_inventory_v1_agents_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6616,7 +6822,7 @@ func (x *AddPostgresExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddPostgresExporterParams.ProtoReflect.Descriptor instead. func (*AddPostgresExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{38} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{40} } func (x *AddPostgresExporterParams) GetPmmAgentId() string { @@ -6798,7 +7004,7 @@ type ChangePostgresExporterParams struct { func (x *ChangePostgresExporterParams) Reset() { *x = ChangePostgresExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[39] + mi := &file_inventory_v1_agents_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6810,7 +7016,7 @@ func (x *ChangePostgresExporterParams) String() string { func (*ChangePostgresExporterParams) ProtoMessage() {} func (x *ChangePostgresExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[39] + mi := &file_inventory_v1_agents_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6823,7 +7029,7 @@ func (x *ChangePostgresExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangePostgresExporterParams.ProtoReflect.Descriptor instead. func (*ChangePostgresExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{39} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{41} } func (x *ChangePostgresExporterParams) GetEnable() bool { @@ -6995,7 +7201,7 @@ type AddProxySQLExporterParams struct { func (x *AddProxySQLExporterParams) Reset() { *x = AddProxySQLExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[40] + mi := &file_inventory_v1_agents_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7007,7 +7213,7 @@ func (x *AddProxySQLExporterParams) String() string { func (*AddProxySQLExporterParams) ProtoMessage() {} func (x *AddProxySQLExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[40] + mi := &file_inventory_v1_agents_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7020,7 +7226,7 @@ func (x *AddProxySQLExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddProxySQLExporterParams.ProtoReflect.Descriptor instead. func (*AddProxySQLExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{40} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{42} } func (x *AddProxySQLExporterParams) GetPmmAgentId() string { @@ -7155,7 +7361,7 @@ type ChangeProxySQLExporterParams struct { func (x *ChangeProxySQLExporterParams) Reset() { *x = ChangeProxySQLExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[41] + mi := &file_inventory_v1_agents_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7167,7 +7373,7 @@ func (x *ChangeProxySQLExporterParams) String() string { func (*ChangeProxySQLExporterParams) ProtoMessage() {} func (x *ChangeProxySQLExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[41] + mi := &file_inventory_v1_agents_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7180,7 +7386,7 @@ func (x *ChangeProxySQLExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeProxySQLExporterParams.ProtoReflect.Descriptor instead. func (*ChangeProxySQLExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{41} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{43} } func (x *ChangeProxySQLExporterParams) GetEnable() bool { @@ -7314,7 +7520,7 @@ type AddQANMySQLPerfSchemaAgentParams struct { func (x *AddQANMySQLPerfSchemaAgentParams) Reset() { *x = AddQANMySQLPerfSchemaAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[42] + mi := &file_inventory_v1_agents_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7326,7 +7532,7 @@ func (x *AddQANMySQLPerfSchemaAgentParams) String() string { func (*AddQANMySQLPerfSchemaAgentParams) ProtoMessage() {} func (x *AddQANMySQLPerfSchemaAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[42] + mi := &file_inventory_v1_agents_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7339,7 +7545,7 @@ func (x *AddQANMySQLPerfSchemaAgentParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddQANMySQLPerfSchemaAgentParams.ProtoReflect.Descriptor instead. func (*AddQANMySQLPerfSchemaAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{42} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{44} } func (x *AddQANMySQLPerfSchemaAgentParams) GetPmmAgentId() string { @@ -7494,7 +7700,7 @@ type ChangeQANMySQLPerfSchemaAgentParams struct { func (x *ChangeQANMySQLPerfSchemaAgentParams) Reset() { *x = ChangeQANMySQLPerfSchemaAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[43] + mi := &file_inventory_v1_agents_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7506,7 +7712,7 @@ func (x *ChangeQANMySQLPerfSchemaAgentParams) String() string { func (*ChangeQANMySQLPerfSchemaAgentParams) ProtoMessage() {} func (x *ChangeQANMySQLPerfSchemaAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[43] + mi := &file_inventory_v1_agents_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7519,7 +7725,7 @@ func (x *ChangeQANMySQLPerfSchemaAgentParams) ProtoReflect() protoreflect.Messag // Deprecated: Use ChangeQANMySQLPerfSchemaAgentParams.ProtoReflect.Descriptor instead. func (*ChangeQANMySQLPerfSchemaAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{43} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{45} } func (x *ChangeQANMySQLPerfSchemaAgentParams) GetEnable() bool { @@ -7677,7 +7883,7 @@ type AddQANMySQLSlowlogAgentParams struct { func (x *AddQANMySQLSlowlogAgentParams) Reset() { *x = AddQANMySQLSlowlogAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[44] + mi := &file_inventory_v1_agents_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7689,7 +7895,7 @@ func (x *AddQANMySQLSlowlogAgentParams) String() string { func (*AddQANMySQLSlowlogAgentParams) ProtoMessage() {} func (x *AddQANMySQLSlowlogAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[44] + mi := &file_inventory_v1_agents_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7702,7 +7908,7 @@ func (x *AddQANMySQLSlowlogAgentParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddQANMySQLSlowlogAgentParams.ProtoReflect.Descriptor instead. func (*AddQANMySQLSlowlogAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{44} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{46} } func (x *AddQANMySQLSlowlogAgentParams) GetPmmAgentId() string { @@ -7866,7 +8072,7 @@ type ChangeQANMySQLSlowlogAgentParams struct { func (x *ChangeQANMySQLSlowlogAgentParams) Reset() { *x = ChangeQANMySQLSlowlogAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[45] + mi := &file_inventory_v1_agents_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7878,7 +8084,7 @@ func (x *ChangeQANMySQLSlowlogAgentParams) String() string { func (*ChangeQANMySQLSlowlogAgentParams) ProtoMessage() {} func (x *ChangeQANMySQLSlowlogAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[45] + mi := &file_inventory_v1_agents_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7891,7 +8097,7 @@ func (x *ChangeQANMySQLSlowlogAgentParams) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeQANMySQLSlowlogAgentParams.ProtoReflect.Descriptor instead. func (*ChangeQANMySQLSlowlogAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{45} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{47} } func (x *ChangeQANMySQLSlowlogAgentParams) GetEnable() bool { @@ -8053,7 +8259,7 @@ type AddQANMongoDBProfilerAgentParams struct { func (x *AddQANMongoDBProfilerAgentParams) Reset() { *x = AddQANMongoDBProfilerAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[46] + mi := &file_inventory_v1_agents_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8065,7 +8271,7 @@ func (x *AddQANMongoDBProfilerAgentParams) String() string { func (*AddQANMongoDBProfilerAgentParams) ProtoMessage() {} func (x *AddQANMongoDBProfilerAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[46] + mi := &file_inventory_v1_agents_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8078,7 +8284,7 @@ func (x *AddQANMongoDBProfilerAgentParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddQANMongoDBProfilerAgentParams.ProtoReflect.Descriptor instead. func (*AddQANMongoDBProfilerAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{46} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{48} } func (x *AddQANMongoDBProfilerAgentParams) GetPmmAgentId() string { @@ -8224,7 +8430,7 @@ type ChangeQANMongoDBProfilerAgentParams struct { func (x *ChangeQANMongoDBProfilerAgentParams) Reset() { *x = ChangeQANMongoDBProfilerAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[47] + mi := &file_inventory_v1_agents_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8236,7 +8442,7 @@ func (x *ChangeQANMongoDBProfilerAgentParams) String() string { func (*ChangeQANMongoDBProfilerAgentParams) ProtoMessage() {} func (x *ChangeQANMongoDBProfilerAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[47] + mi := &file_inventory_v1_agents_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8249,7 +8455,7 @@ func (x *ChangeQANMongoDBProfilerAgentParams) ProtoReflect() protoreflect.Messag // Deprecated: Use ChangeQANMongoDBProfilerAgentParams.ProtoReflect.Descriptor instead. func (*ChangeQANMongoDBProfilerAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{47} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{49} } func (x *ChangeQANMongoDBProfilerAgentParams) GetEnable() bool { @@ -8397,7 +8603,7 @@ type AddQANMongoDBMongologAgentParams struct { func (x *AddQANMongoDBMongologAgentParams) Reset() { *x = AddQANMongoDBMongologAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[48] + mi := &file_inventory_v1_agents_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8409,7 +8615,7 @@ func (x *AddQANMongoDBMongologAgentParams) String() string { func (*AddQANMongoDBMongologAgentParams) ProtoMessage() {} func (x *AddQANMongoDBMongologAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[48] + mi := &file_inventory_v1_agents_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8422,7 +8628,7 @@ func (x *AddQANMongoDBMongologAgentParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddQANMongoDBMongologAgentParams.ProtoReflect.Descriptor instead. func (*AddQANMongoDBMongologAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{48} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{50} } func (x *AddQANMongoDBMongologAgentParams) GetPmmAgentId() string { @@ -8568,7 +8774,7 @@ type ChangeQANMongoDBMongologAgentParams struct { func (x *ChangeQANMongoDBMongologAgentParams) Reset() { *x = ChangeQANMongoDBMongologAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[49] + mi := &file_inventory_v1_agents_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8580,7 +8786,7 @@ func (x *ChangeQANMongoDBMongologAgentParams) String() string { func (*ChangeQANMongoDBMongologAgentParams) ProtoMessage() {} func (x *ChangeQANMongoDBMongologAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[49] + mi := &file_inventory_v1_agents_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8593,7 +8799,7 @@ func (x *ChangeQANMongoDBMongologAgentParams) ProtoReflect() protoreflect.Messag // Deprecated: Use ChangeQANMongoDBMongologAgentParams.ProtoReflect.Descriptor instead. func (*ChangeQANMongoDBMongologAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{49} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{51} } func (x *ChangeQANMongoDBMongologAgentParams) GetEnable() bool { @@ -8737,7 +8943,7 @@ type AddQANPostgreSQLPgStatementsAgentParams struct { func (x *AddQANPostgreSQLPgStatementsAgentParams) Reset() { *x = AddQANPostgreSQLPgStatementsAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[50] + mi := &file_inventory_v1_agents_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8749,7 +8955,7 @@ func (x *AddQANPostgreSQLPgStatementsAgentParams) String() string { func (*AddQANPostgreSQLPgStatementsAgentParams) ProtoMessage() {} func (x *AddQANPostgreSQLPgStatementsAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[50] + mi := &file_inventory_v1_agents_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8762,7 +8968,7 @@ func (x *AddQANPostgreSQLPgStatementsAgentParams) ProtoReflect() protoreflect.Me // Deprecated: Use AddQANPostgreSQLPgStatementsAgentParams.ProtoReflect.Descriptor instead. func (*AddQANPostgreSQLPgStatementsAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{50} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{52} } func (x *AddQANPostgreSQLPgStatementsAgentParams) GetPmmAgentId() string { @@ -8899,7 +9105,7 @@ type ChangeQANPostgreSQLPgStatementsAgentParams struct { func (x *ChangeQANPostgreSQLPgStatementsAgentParams) Reset() { *x = ChangeQANPostgreSQLPgStatementsAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[51] + mi := &file_inventory_v1_agents_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8911,7 +9117,7 @@ func (x *ChangeQANPostgreSQLPgStatementsAgentParams) String() string { func (*ChangeQANPostgreSQLPgStatementsAgentParams) ProtoMessage() {} func (x *ChangeQANPostgreSQLPgStatementsAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[51] + mi := &file_inventory_v1_agents_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8924,7 +9130,7 @@ func (x *ChangeQANPostgreSQLPgStatementsAgentParams) ProtoReflect() protoreflect // Deprecated: Use ChangeQANPostgreSQLPgStatementsAgentParams.ProtoReflect.Descriptor instead. func (*ChangeQANPostgreSQLPgStatementsAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{51} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{53} } func (x *ChangeQANPostgreSQLPgStatementsAgentParams) GetEnable() bool { @@ -9063,7 +9269,7 @@ type AddQANPostgreSQLPgStatMonitorAgentParams struct { func (x *AddQANPostgreSQLPgStatMonitorAgentParams) Reset() { *x = AddQANPostgreSQLPgStatMonitorAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[52] + mi := &file_inventory_v1_agents_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9075,7 +9281,7 @@ func (x *AddQANPostgreSQLPgStatMonitorAgentParams) String() string { func (*AddQANPostgreSQLPgStatMonitorAgentParams) ProtoMessage() {} func (x *AddQANPostgreSQLPgStatMonitorAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[52] + mi := &file_inventory_v1_agents_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9088,7 +9294,7 @@ func (x *AddQANPostgreSQLPgStatMonitorAgentParams) ProtoReflect() protoreflect.M // Deprecated: Use AddQANPostgreSQLPgStatMonitorAgentParams.ProtoReflect.Descriptor instead. func (*AddQANPostgreSQLPgStatMonitorAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{52} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{54} } func (x *AddQANPostgreSQLPgStatMonitorAgentParams) GetPmmAgentId() string { @@ -9234,7 +9440,7 @@ type ChangeQANPostgreSQLPgStatMonitorAgentParams struct { func (x *ChangeQANPostgreSQLPgStatMonitorAgentParams) Reset() { *x = ChangeQANPostgreSQLPgStatMonitorAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[53] + mi := &file_inventory_v1_agents_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9246,7 +9452,7 @@ func (x *ChangeQANPostgreSQLPgStatMonitorAgentParams) String() string { func (*ChangeQANPostgreSQLPgStatMonitorAgentParams) ProtoMessage() {} func (x *ChangeQANPostgreSQLPgStatMonitorAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[53] + mi := &file_inventory_v1_agents_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9259,7 +9465,7 @@ func (x *ChangeQANPostgreSQLPgStatMonitorAgentParams) ProtoReflect() protoreflec // Deprecated: Use ChangeQANPostgreSQLPgStatMonitorAgentParams.ProtoReflect.Descriptor instead. func (*ChangeQANPostgreSQLPgStatMonitorAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{53} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{55} } func (x *ChangeQANPostgreSQLPgStatMonitorAgentParams) GetEnable() bool { @@ -9395,7 +9601,7 @@ type AddRDSExporterParams struct { func (x *AddRDSExporterParams) Reset() { *x = AddRDSExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[54] + mi := &file_inventory_v1_agents_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9407,7 +9613,7 @@ func (x *AddRDSExporterParams) String() string { func (*AddRDSExporterParams) ProtoMessage() {} func (x *AddRDSExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[54] + mi := &file_inventory_v1_agents_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9420,7 +9626,7 @@ func (x *AddRDSExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddRDSExporterParams.ProtoReflect.Descriptor instead. func (*AddRDSExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{54} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{56} } func (x *AddRDSExporterParams) GetPmmAgentId() string { @@ -9519,7 +9725,7 @@ type ChangeRDSExporterParams struct { func (x *ChangeRDSExporterParams) Reset() { *x = ChangeRDSExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[55] + mi := &file_inventory_v1_agents_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9531,7 +9737,7 @@ func (x *ChangeRDSExporterParams) String() string { func (*ChangeRDSExporterParams) ProtoMessage() {} func (x *ChangeRDSExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[55] + mi := &file_inventory_v1_agents_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9544,7 +9750,7 @@ func (x *ChangeRDSExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeRDSExporterParams.ProtoReflect.Descriptor instead. func (*ChangeRDSExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{55} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{57} } func (x *ChangeRDSExporterParams) GetEnable() bool { @@ -9638,7 +9844,7 @@ type AddExternalExporterParams struct { func (x *AddExternalExporterParams) Reset() { *x = AddExternalExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[56] + mi := &file_inventory_v1_agents_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9650,7 +9856,7 @@ func (x *AddExternalExporterParams) String() string { func (*AddExternalExporterParams) ProtoMessage() {} func (x *AddExternalExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[56] + mi := &file_inventory_v1_agents_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9663,7 +9869,7 @@ func (x *AddExternalExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddExternalExporterParams.ProtoReflect.Descriptor instead. func (*AddExternalExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{56} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{58} } func (x *AddExternalExporterParams) GetRunsOnNodeId() string { @@ -9760,7 +9966,7 @@ type ChangeExternalExporterParams struct { func (x *ChangeExternalExporterParams) Reset() { *x = ChangeExternalExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[57] + mi := &file_inventory_v1_agents_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9772,7 +9978,7 @@ func (x *ChangeExternalExporterParams) String() string { func (*ChangeExternalExporterParams) ProtoMessage() {} func (x *ChangeExternalExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[57] + mi := &file_inventory_v1_agents_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9785,7 +9991,7 @@ func (x *ChangeExternalExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeExternalExporterParams.ProtoReflect.Descriptor instead. func (*ChangeExternalExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{57} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{59} } func (x *ChangeExternalExporterParams) GetEnable() bool { @@ -9876,7 +10082,7 @@ type AddAzureDatabaseExporterParams struct { func (x *AddAzureDatabaseExporterParams) Reset() { *x = AddAzureDatabaseExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[58] + mi := &file_inventory_v1_agents_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9888,7 +10094,7 @@ func (x *AddAzureDatabaseExporterParams) String() string { func (*AddAzureDatabaseExporterParams) ProtoMessage() {} func (x *AddAzureDatabaseExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[58] + mi := &file_inventory_v1_agents_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9901,7 +10107,7 @@ func (x *AddAzureDatabaseExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddAzureDatabaseExporterParams.ProtoReflect.Descriptor instead. func (*AddAzureDatabaseExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{58} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{60} } func (x *AddAzureDatabaseExporterParams) GetPmmAgentId() string { @@ -10016,7 +10222,7 @@ type ChangeAzureDatabaseExporterParams struct { func (x *ChangeAzureDatabaseExporterParams) Reset() { *x = ChangeAzureDatabaseExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[59] + mi := &file_inventory_v1_agents_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10028,7 +10234,7 @@ func (x *ChangeAzureDatabaseExporterParams) String() string { func (*ChangeAzureDatabaseExporterParams) ProtoMessage() {} func (x *ChangeAzureDatabaseExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[59] + mi := &file_inventory_v1_agents_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10041,7 +10247,7 @@ func (x *ChangeAzureDatabaseExporterParams) ProtoReflect() protoreflect.Message // Deprecated: Use ChangeAzureDatabaseExporterParams.ProtoReflect.Descriptor instead. func (*ChangeAzureDatabaseExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{59} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{61} } func (x *ChangeAzureDatabaseExporterParams) GetEnable() bool { @@ -10124,7 +10330,7 @@ type ChangeNomadAgentParams struct { func (x *ChangeNomadAgentParams) Reset() { *x = ChangeNomadAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[60] + mi := &file_inventory_v1_agents_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10136,7 +10342,7 @@ func (x *ChangeNomadAgentParams) String() string { func (*ChangeNomadAgentParams) ProtoMessage() {} func (x *ChangeNomadAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[60] + mi := &file_inventory_v1_agents_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10149,7 +10355,7 @@ func (x *ChangeNomadAgentParams) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeNomadAgentParams.ProtoReflect.Descriptor instead. func (*ChangeNomadAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{60} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{62} } func (x *ChangeNomadAgentParams) GetEnable() bool { @@ -10201,7 +10407,7 @@ type AddValkeyExporterParams struct { func (x *AddValkeyExporterParams) Reset() { *x = AddValkeyExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[61] + mi := &file_inventory_v1_agents_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10213,7 +10419,7 @@ func (x *AddValkeyExporterParams) String() string { func (*AddValkeyExporterParams) ProtoMessage() {} func (x *AddValkeyExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[61] + mi := &file_inventory_v1_agents_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10226,7 +10432,7 @@ func (x *AddValkeyExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddValkeyExporterParams.ProtoReflect.Descriptor instead. func (*AddValkeyExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{61} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{63} } func (x *AddValkeyExporterParams) GetPmmAgentId() string { @@ -10388,7 +10594,7 @@ type ChangeValkeyExporterParams struct { func (x *ChangeValkeyExporterParams) Reset() { *x = ChangeValkeyExporterParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[62] + mi := &file_inventory_v1_agents_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10400,7 +10606,7 @@ func (x *ChangeValkeyExporterParams) String() string { func (*ChangeValkeyExporterParams) ProtoMessage() {} func (x *ChangeValkeyExporterParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[62] + mi := &file_inventory_v1_agents_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10413,7 +10619,7 @@ func (x *ChangeValkeyExporterParams) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeValkeyExporterParams.ProtoReflect.Descriptor instead. func (*ChangeValkeyExporterParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{62} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{64} } func (x *ChangeValkeyExporterParams) GetEnable() bool { @@ -10567,7 +10773,7 @@ type AddRTAMongoDBAgentParams struct { func (x *AddRTAMongoDBAgentParams) Reset() { *x = AddRTAMongoDBAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[63] + mi := &file_inventory_v1_agents_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10579,7 +10785,7 @@ func (x *AddRTAMongoDBAgentParams) String() string { func (*AddRTAMongoDBAgentParams) ProtoMessage() {} func (x *AddRTAMongoDBAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[63] + mi := &file_inventory_v1_agents_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10592,7 +10798,7 @@ func (x *AddRTAMongoDBAgentParams) ProtoReflect() protoreflect.Message { // Deprecated: Use AddRTAMongoDBAgentParams.ProtoReflect.Descriptor instead. func (*AddRTAMongoDBAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{63} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{65} } func (x *AddRTAMongoDBAgentParams) GetPmmAgentId() string { @@ -10725,7 +10931,7 @@ type ChangeRTAMongoDBAgentParams struct { func (x *ChangeRTAMongoDBAgentParams) Reset() { *x = ChangeRTAMongoDBAgentParams{} - mi := &file_inventory_v1_agents_proto_msgTypes[64] + mi := &file_inventory_v1_agents_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10737,7 +10943,7 @@ func (x *ChangeRTAMongoDBAgentParams) String() string { func (*ChangeRTAMongoDBAgentParams) ProtoMessage() {} func (x *ChangeRTAMongoDBAgentParams) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[64] + mi := &file_inventory_v1_agents_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10750,7 +10956,7 @@ func (x *ChangeRTAMongoDBAgentParams) ProtoReflect() protoreflect.Message { // Deprecated: Use ChangeRTAMongoDBAgentParams.ProtoReflect.Descriptor instead. func (*ChangeRTAMongoDBAgentParams) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{64} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{66} } func (x *ChangeRTAMongoDBAgentParams) GetEnable() bool { @@ -10848,7 +11054,7 @@ type RemoveAgentRequest struct { func (x *RemoveAgentRequest) Reset() { *x = RemoveAgentRequest{} - mi := &file_inventory_v1_agents_proto_msgTypes[65] + mi := &file_inventory_v1_agents_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10860,7 +11066,7 @@ func (x *RemoveAgentRequest) String() string { func (*RemoveAgentRequest) ProtoMessage() {} func (x *RemoveAgentRequest) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[65] + mi := &file_inventory_v1_agents_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10873,7 +11079,7 @@ func (x *RemoveAgentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveAgentRequest.ProtoReflect.Descriptor instead. func (*RemoveAgentRequest) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{65} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{67} } func (x *RemoveAgentRequest) GetAgentId() string { @@ -10898,7 +11104,7 @@ type RemoveAgentResponse struct { func (x *RemoveAgentResponse) Reset() { *x = RemoveAgentResponse{} - mi := &file_inventory_v1_agents_proto_msgTypes[66] + mi := &file_inventory_v1_agents_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10910,7 +11116,7 @@ func (x *RemoveAgentResponse) String() string { func (*RemoveAgentResponse) ProtoMessage() {} func (x *RemoveAgentResponse) ProtoReflect() protoreflect.Message { - mi := &file_inventory_v1_agents_proto_msgTypes[66] + mi := &file_inventory_v1_agents_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10923,14 +11129,18 @@ func (x *RemoveAgentResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveAgentResponse.ProtoReflect.Descriptor instead. func (*RemoveAgentResponse) Descriptor() ([]byte, []int) { - return file_inventory_v1_agents_proto_rawDescGZIP(), []int{66} + return file_inventory_v1_agents_proto_rawDescGZIP(), []int{68} } var File_inventory_v1_agents_proto protoreflect.FileDescriptor const file_inventory_v1_agents_proto_rawDesc = "" + "\n" + - "\x19inventory/v1/agents.proto\x12\finventory.v1\x1a\x13common/common.proto\x1a common/metrics_resolutions.proto\x1a\x1aextensions/v1/redact.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1finventory/v1/agent_status.proto\x1a\x1cinventory/v1/log_level.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a\x17validate/validate.proto\"\xa6\x02\n" + + "\x19inventory/v1/agents.proto\x12\finventory.v1\x1a\x13common/common.proto\x1a common/metrics_resolutions.proto\x1a\x1aextensions/v1/redact.proto\x1a\x1cgoogle/api/annotations.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x1finventory/v1/agent_status.proto\x1a\x1cinventory/v1/log_level.proto\x1a.protoc-gen-openapiv2/options/annotations.proto\x1a\x17validate/validate.proto\"4\n" + + "\n" + + "WatchedLog\x12\x12\n" + + "\x04path\x18\x01 \x01(\tR\x04path\x12\x12\n" + + "\x04type\x18\x02 \x01(\tR\x04type\"\xa6\x02\n" + "\bPMMAgent\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12%\n" + "\x0fruns_on_node_id\x18\x02 \x01(\tR\frunsOnNodeId\x12M\n" + @@ -11177,6 +11387,22 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1aA\n" + "\x13ExtraDsnParamsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x92\x04\n" + + "\x11DBLogWatcherAgent\x12\x19\n" + + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12 \n" + + "\fpmm_agent_id\x18\x02 \x01(\tR\n" + + "pmmAgentId\x12\x1a\n" + + "\bdisabled\x18\x03 \x01(\bR\bdisabled\x12\x1d\n" + + "\n" + + "service_id\x18\x04 \x01(\tR\tserviceId\x12\x1b\n" + + "\tdb_system\x18\x05 \x01(\tR\bdbSystem\x12;\n" + + "\fwatched_logs\x18\x06 \x03(\v2\x18.inventory.v1.WatchedLogR\vwatchedLogs\x12V\n" + + "\rcustom_labels\x18\a \x03(\v21.inventory.v1.DBLogWatcherAgent.CustomLabelsEntryR\fcustomLabels\x121\n" + + "\x06status\x18\x14 \x01(\x0e2\x19.inventory.v1.AgentStatusR\x06status\x12*\n" + + "\x11process_exec_path\x18\x15 \x01(\tR\x0fprocessExecPath\x123\n" + + "\tlog_level\x18\x16 \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x1a?\n" + + "\x11CustomLabelsEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xe9\x04\n" + "\x17QANMongoDBProfilerAgent\x12\x19\n" + "\bagent_id\x18\x01 \x01(\tR\aagentId\x12 \n" + @@ -11358,7 +11584,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\n" + "service_id\x18\x03 \x01(\tR\tserviceId\x126\n" + "\n" + - "agent_type\x18\x04 \x01(\x0e2\x17.inventory.v1.AgentTypeR\tagentType\"\x98\f\n" + + "agent_type\x18\x04 \x01(\x0e2\x17.inventory.v1.AgentTypeR\tagentType\"\xea\f\n" + "\x12ListAgentsResponse\x123\n" + "\tpmm_agent\x18\x01 \x03(\v2\x16.inventory.v1.PMMAgentR\bpmmAgent\x120\n" + "\bvm_agent\x18\x02 \x03(\v2\x15.inventory.v1.VMAgentR\avmAgent\x12?\n" + @@ -11380,9 +11606,10 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\vnomad_agent\x18\x10 \x03(\v2\x18.inventory.v1.NomadAgentR\n" + "nomadAgent\x12E\n" + "\x0fvalkey_exporter\x18\x11 \x03(\v2\x1c.inventory.v1.ValkeyExporterR\x0evalkeyExporter\x12I\n" + - "\x11rta_mongodb_agent\x18\x13 \x03(\v2\x1d.inventory.v1.RTAMongoDBAgentR\x0frtaMongodbAgent\"5\n" + + "\x11rta_mongodb_agent\x18\x13 \x03(\v2\x1d.inventory.v1.RTAMongoDBAgentR\x0frtaMongodbAgent\x12P\n" + + "\x14db_log_watcher_agent\x18\x14 \x03(\v2\x1f.inventory.v1.DBLogWatcherAgentR\x11dbLogWatcherAgent\"5\n" + "\x0fGetAgentRequest\x12\"\n" + - "\bagent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10$R\aagentId\"\xc4\f\n" + + "\bagent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10$R\aagentId\"\x98\r\n" + "\x10GetAgentResponse\x125\n" + "\tpmm_agent\x18\x01 \x01(\v2\x16.inventory.v1.PMMAgentH\x00R\bpmmAgent\x121\n" + "\avmagent\x18\x02 \x01(\v2\x15.inventory.v1.VMAgentH\x00R\avmagent\x12A\n" + @@ -11404,7 +11631,8 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\vnomad_agent\x18\x10 \x01(\v2\x18.inventory.v1.NomadAgentH\x00R\n" + "nomadAgent\x12G\n" + "\x0fvalkey_exporter\x18\x11 \x01(\v2\x1c.inventory.v1.ValkeyExporterH\x00R\x0evalkeyExporter\x12K\n" + - "\x11rta_mongodb_agent\x18\x13 \x01(\v2\x1d.inventory.v1.RTAMongoDBAgentH\x00R\x0frtaMongodbAgentB\a\n" + + "\x11rta_mongodb_agent\x18\x13 \x01(\v2\x1d.inventory.v1.RTAMongoDBAgentH\x00R\x0frtaMongodbAgent\x12R\n" + + "\x14db_log_watcher_agent\x18\x14 \x01(\v2\x1f.inventory.v1.DBLogWatcherAgentH\x00R\x11dbLogWatcherAgentB\a\n" + "\x05agent\"O\n" + "\x13GetAgentLogsRequest\x12\"\n" + "\bagent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10$R\aagentId\x12\x14\n" + @@ -12349,7 +12577,7 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x12RemoveAgentRequest\x12\"\n" + "\bagent_id\x18\x01 \x01(\tB\a\xfaB\x04r\x02\x10\x01R\aagentId\x12\x14\n" + "\x05force\x18\x02 \x01(\bR\x05force\"\x15\n" + - "\x13RemoveAgentResponse*\xd0\x05\n" + + "\x13RemoveAgentResponse*\xf5\x05\n" + "\tAgentType\x12\x1a\n" + "\x16AGENT_TYPE_UNSPECIFIED\x10\x00\x12\x18\n" + "\x14AGENT_TYPE_PMM_AGENT\x10\x01\x12\x17\n" + @@ -12371,7 +12599,8 @@ const file_inventory_v1_agents_proto_rawDesc = "" + "\x17AGENT_TYPE_RDS_EXPORTER\x10\v\x12&\n" + "\"AGENT_TYPE_AZURE_DATABASE_EXPORTER\x10\x0f\x12\x1a\n" + "\x16AGENT_TYPE_NOMAD_AGENT\x10\x10\x12 \n" + - "\x1cAGENT_TYPE_RTA_MONGODB_AGENT\x10\x132\x83\t\n" + + "\x1cAGENT_TYPE_RTA_MONGODB_AGENT\x10\x13\x12#\n" + + "\x1fAGENT_TYPE_DB_LOG_WATCHER_AGENT\x10\x142\x83\t\n" + "\rAgentsService\x12\x9c\x01\n" + "\n" + "ListAgents\x12\x1f.inventory.v1.ListAgentsRequest\x1a .inventory.v1.ListAgentsResponse\"K\x92A,\x12\vList Agents\x1a\x1dReturns a list of all Agents.\x82\xd3\xe4\x93\x02\x16\x12\x14/v1/inventory/agents\x12\x9f\x01\n" + @@ -12394,414 +12623,420 @@ func file_inventory_v1_agents_proto_rawDescGZIP() []byte { return file_inventory_v1_agents_proto_rawDescData } -var ( - file_inventory_v1_agents_proto_enumTypes = make([]protoimpl.EnumInfo, 1) - file_inventory_v1_agents_proto_msgTypes = make([]protoimpl.MessageInfo, 107) - file_inventory_v1_agents_proto_goTypes = []any{ - AgentType(0), // 0: inventory.v1.AgentType - (*PMMAgent)(nil), // 1: inventory.v1.PMMAgent - (*VMAgent)(nil), // 2: inventory.v1.VMAgent - (*NomadAgent)(nil), // 3: inventory.v1.NomadAgent - (*NodeExporter)(nil), // 4: inventory.v1.NodeExporter - (*MySQLdExporter)(nil), // 5: inventory.v1.MySQLdExporter - (*MongoDBExporter)(nil), // 6: inventory.v1.MongoDBExporter - (*PostgresExporter)(nil), // 7: inventory.v1.PostgresExporter - (*ProxySQLExporter)(nil), // 8: inventory.v1.ProxySQLExporter - (*ValkeyExporter)(nil), // 9: inventory.v1.ValkeyExporter - (*QANMySQLPerfSchemaAgent)(nil), // 10: inventory.v1.QANMySQLPerfSchemaAgent - (*QANMySQLSlowlogAgent)(nil), // 11: inventory.v1.QANMySQLSlowlogAgent - (*QANMongoDBProfilerAgent)(nil), // 12: inventory.v1.QANMongoDBProfilerAgent - (*QANMongoDBMongologAgent)(nil), // 13: inventory.v1.QANMongoDBMongologAgent - (*RTAOptions)(nil), // 14: inventory.v1.RTAOptions - (*RTAMongoDBAgent)(nil), // 15: inventory.v1.RTAMongoDBAgent - (*QANPostgreSQLPgStatementsAgent)(nil), // 16: inventory.v1.QANPostgreSQLPgStatementsAgent - (*QANPostgreSQLPgStatMonitorAgent)(nil), // 17: inventory.v1.QANPostgreSQLPgStatMonitorAgent - (*RDSExporter)(nil), // 18: inventory.v1.RDSExporter - (*ExternalExporter)(nil), // 19: inventory.v1.ExternalExporter - (*AzureDatabaseExporter)(nil), // 20: inventory.v1.AzureDatabaseExporter - (*ChangeCommonAgentParams)(nil), // 21: inventory.v1.ChangeCommonAgentParams - (*ListAgentsRequest)(nil), // 22: inventory.v1.ListAgentsRequest - (*ListAgentsResponse)(nil), // 23: inventory.v1.ListAgentsResponse - (*GetAgentRequest)(nil), // 24: inventory.v1.GetAgentRequest - (*GetAgentResponse)(nil), // 25: inventory.v1.GetAgentResponse - (*GetAgentLogsRequest)(nil), // 26: inventory.v1.GetAgentLogsRequest - (*GetAgentLogsResponse)(nil), // 27: inventory.v1.GetAgentLogsResponse - (*AddAgentRequest)(nil), // 28: inventory.v1.AddAgentRequest - (*AddAgentResponse)(nil), // 29: inventory.v1.AddAgentResponse - (*ChangeAgentRequest)(nil), // 30: inventory.v1.ChangeAgentRequest - (*ChangeAgentResponse)(nil), // 31: inventory.v1.ChangeAgentResponse - (*AddPMMAgentParams)(nil), // 32: inventory.v1.AddPMMAgentParams - (*AddNodeExporterParams)(nil), // 33: inventory.v1.AddNodeExporterParams - (*ChangeNodeExporterParams)(nil), // 34: inventory.v1.ChangeNodeExporterParams - (*AddMySQLdExporterParams)(nil), // 35: inventory.v1.AddMySQLdExporterParams - (*ChangeMySQLdExporterParams)(nil), // 36: inventory.v1.ChangeMySQLdExporterParams - (*AddMongoDBExporterParams)(nil), // 37: inventory.v1.AddMongoDBExporterParams - (*ChangeMongoDBExporterParams)(nil), // 38: inventory.v1.ChangeMongoDBExporterParams - (*AddPostgresExporterParams)(nil), // 39: inventory.v1.AddPostgresExporterParams - (*ChangePostgresExporterParams)(nil), // 40: inventory.v1.ChangePostgresExporterParams - (*AddProxySQLExporterParams)(nil), // 41: inventory.v1.AddProxySQLExporterParams - (*ChangeProxySQLExporterParams)(nil), // 42: inventory.v1.ChangeProxySQLExporterParams - (*AddQANMySQLPerfSchemaAgentParams)(nil), // 43: inventory.v1.AddQANMySQLPerfSchemaAgentParams - (*ChangeQANMySQLPerfSchemaAgentParams)(nil), // 44: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams - (*AddQANMySQLSlowlogAgentParams)(nil), // 45: inventory.v1.AddQANMySQLSlowlogAgentParams - (*ChangeQANMySQLSlowlogAgentParams)(nil), // 46: inventory.v1.ChangeQANMySQLSlowlogAgentParams - (*AddQANMongoDBProfilerAgentParams)(nil), // 47: inventory.v1.AddQANMongoDBProfilerAgentParams - (*ChangeQANMongoDBProfilerAgentParams)(nil), // 48: inventory.v1.ChangeQANMongoDBProfilerAgentParams - (*AddQANMongoDBMongologAgentParams)(nil), // 49: inventory.v1.AddQANMongoDBMongologAgentParams - (*ChangeQANMongoDBMongologAgentParams)(nil), // 50: inventory.v1.ChangeQANMongoDBMongologAgentParams - (*AddQANPostgreSQLPgStatementsAgentParams)(nil), // 51: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams - (*ChangeQANPostgreSQLPgStatementsAgentParams)(nil), // 52: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams - (*AddQANPostgreSQLPgStatMonitorAgentParams)(nil), // 53: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams - (*ChangeQANPostgreSQLPgStatMonitorAgentParams)(nil), // 54: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams - (*AddRDSExporterParams)(nil), // 55: inventory.v1.AddRDSExporterParams - (*ChangeRDSExporterParams)(nil), // 56: inventory.v1.ChangeRDSExporterParams - (*AddExternalExporterParams)(nil), // 57: inventory.v1.AddExternalExporterParams - (*ChangeExternalExporterParams)(nil), // 58: inventory.v1.ChangeExternalExporterParams - (*AddAzureDatabaseExporterParams)(nil), // 59: inventory.v1.AddAzureDatabaseExporterParams - (*ChangeAzureDatabaseExporterParams)(nil), // 60: inventory.v1.ChangeAzureDatabaseExporterParams - (*ChangeNomadAgentParams)(nil), // 61: inventory.v1.ChangeNomadAgentParams - (*AddValkeyExporterParams)(nil), // 62: inventory.v1.AddValkeyExporterParams - (*ChangeValkeyExporterParams)(nil), // 63: inventory.v1.ChangeValkeyExporterParams - (*AddRTAMongoDBAgentParams)(nil), // 64: inventory.v1.AddRTAMongoDBAgentParams - (*ChangeRTAMongoDBAgentParams)(nil), // 65: inventory.v1.ChangeRTAMongoDBAgentParams - (*RemoveAgentRequest)(nil), // 66: inventory.v1.RemoveAgentRequest - (*RemoveAgentResponse)(nil), // 67: inventory.v1.RemoveAgentResponse - nil, // 68: inventory.v1.PMMAgent.CustomLabelsEntry - nil, // 69: inventory.v1.NodeExporter.CustomLabelsEntry - nil, // 70: inventory.v1.MySQLdExporter.CustomLabelsEntry - nil, // 71: inventory.v1.MySQLdExporter.ExtraDsnParamsEntry - nil, // 72: inventory.v1.MongoDBExporter.CustomLabelsEntry - nil, // 73: inventory.v1.PostgresExporter.CustomLabelsEntry - nil, // 74: inventory.v1.ProxySQLExporter.CustomLabelsEntry - nil, // 75: inventory.v1.ValkeyExporter.CustomLabelsEntry - nil, // 76: inventory.v1.QANMySQLPerfSchemaAgent.CustomLabelsEntry - nil, // 77: inventory.v1.QANMySQLPerfSchemaAgent.ExtraDsnParamsEntry - nil, // 78: inventory.v1.QANMySQLSlowlogAgent.CustomLabelsEntry - nil, // 79: inventory.v1.QANMySQLSlowlogAgent.ExtraDsnParamsEntry - nil, // 80: inventory.v1.QANMongoDBProfilerAgent.CustomLabelsEntry - nil, // 81: inventory.v1.QANMongoDBMongologAgent.CustomLabelsEntry - nil, // 82: inventory.v1.RTAMongoDBAgent.CustomLabelsEntry - nil, // 83: inventory.v1.QANPostgreSQLPgStatementsAgent.CustomLabelsEntry - nil, // 84: inventory.v1.QANPostgreSQLPgStatMonitorAgent.CustomLabelsEntry - nil, // 85: inventory.v1.RDSExporter.CustomLabelsEntry - nil, // 86: inventory.v1.ExternalExporter.CustomLabelsEntry - nil, // 87: inventory.v1.AzureDatabaseExporter.CustomLabelsEntry - nil, // 88: inventory.v1.AddPMMAgentParams.CustomLabelsEntry - nil, // 89: inventory.v1.AddNodeExporterParams.CustomLabelsEntry - nil, // 90: inventory.v1.AddMySQLdExporterParams.CustomLabelsEntry - nil, // 91: inventory.v1.AddMySQLdExporterParams.ExtraDsnParamsEntry - nil, // 92: inventory.v1.AddMongoDBExporterParams.CustomLabelsEntry - nil, // 93: inventory.v1.AddPostgresExporterParams.CustomLabelsEntry - nil, // 94: inventory.v1.AddProxySQLExporterParams.CustomLabelsEntry - nil, // 95: inventory.v1.AddQANMySQLPerfSchemaAgentParams.CustomLabelsEntry - nil, // 96: inventory.v1.AddQANMySQLPerfSchemaAgentParams.ExtraDsnParamsEntry - nil, // 97: inventory.v1.AddQANMySQLSlowlogAgentParams.CustomLabelsEntry - nil, // 98: inventory.v1.AddQANMySQLSlowlogAgentParams.ExtraDsnParamsEntry - nil, // 99: inventory.v1.AddQANMongoDBProfilerAgentParams.CustomLabelsEntry - nil, // 100: inventory.v1.AddQANMongoDBMongologAgentParams.CustomLabelsEntry - nil, // 101: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.CustomLabelsEntry - nil, // 102: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.CustomLabelsEntry - nil, // 103: inventory.v1.AddRDSExporterParams.CustomLabelsEntry - nil, // 104: inventory.v1.AddExternalExporterParams.CustomLabelsEntry - nil, // 105: inventory.v1.AddAzureDatabaseExporterParams.CustomLabelsEntry - nil, // 106: inventory.v1.AddValkeyExporterParams.CustomLabelsEntry - nil, // 107: inventory.v1.AddRTAMongoDBAgentParams.CustomLabelsEntry - AgentStatus(0), // 108: inventory.v1.AgentStatus - LogLevel(0), // 109: inventory.v1.LogLevel - (*common.MetricsResolutions)(nil), // 110: common.MetricsResolutions - (*durationpb.Duration)(nil), // 111: google.protobuf.Duration - (*common.StringMap)(nil), // 112: common.StringMap - } -) - +var file_inventory_v1_agents_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_inventory_v1_agents_proto_msgTypes = make([]protoimpl.MessageInfo, 110) +var file_inventory_v1_agents_proto_goTypes = []any{ + (AgentType)(0), // 0: inventory.v1.AgentType + (*WatchedLog)(nil), // 1: inventory.v1.WatchedLog + (*PMMAgent)(nil), // 2: inventory.v1.PMMAgent + (*VMAgent)(nil), // 3: inventory.v1.VMAgent + (*NomadAgent)(nil), // 4: inventory.v1.NomadAgent + (*NodeExporter)(nil), // 5: inventory.v1.NodeExporter + (*MySQLdExporter)(nil), // 6: inventory.v1.MySQLdExporter + (*MongoDBExporter)(nil), // 7: inventory.v1.MongoDBExporter + (*PostgresExporter)(nil), // 8: inventory.v1.PostgresExporter + (*ProxySQLExporter)(nil), // 9: inventory.v1.ProxySQLExporter + (*ValkeyExporter)(nil), // 10: inventory.v1.ValkeyExporter + (*QANMySQLPerfSchemaAgent)(nil), // 11: inventory.v1.QANMySQLPerfSchemaAgent + (*QANMySQLSlowlogAgent)(nil), // 12: inventory.v1.QANMySQLSlowlogAgent + (*DBLogWatcherAgent)(nil), // 13: inventory.v1.DBLogWatcherAgent + (*QANMongoDBProfilerAgent)(nil), // 14: inventory.v1.QANMongoDBProfilerAgent + (*QANMongoDBMongologAgent)(nil), // 15: inventory.v1.QANMongoDBMongologAgent + (*RTAOptions)(nil), // 16: inventory.v1.RTAOptions + (*RTAMongoDBAgent)(nil), // 17: inventory.v1.RTAMongoDBAgent + (*QANPostgreSQLPgStatementsAgent)(nil), // 18: inventory.v1.QANPostgreSQLPgStatementsAgent + (*QANPostgreSQLPgStatMonitorAgent)(nil), // 19: inventory.v1.QANPostgreSQLPgStatMonitorAgent + (*RDSExporter)(nil), // 20: inventory.v1.RDSExporter + (*ExternalExporter)(nil), // 21: inventory.v1.ExternalExporter + (*AzureDatabaseExporter)(nil), // 22: inventory.v1.AzureDatabaseExporter + (*ChangeCommonAgentParams)(nil), // 23: inventory.v1.ChangeCommonAgentParams + (*ListAgentsRequest)(nil), // 24: inventory.v1.ListAgentsRequest + (*ListAgentsResponse)(nil), // 25: inventory.v1.ListAgentsResponse + (*GetAgentRequest)(nil), // 26: inventory.v1.GetAgentRequest + (*GetAgentResponse)(nil), // 27: inventory.v1.GetAgentResponse + (*GetAgentLogsRequest)(nil), // 28: inventory.v1.GetAgentLogsRequest + (*GetAgentLogsResponse)(nil), // 29: inventory.v1.GetAgentLogsResponse + (*AddAgentRequest)(nil), // 30: inventory.v1.AddAgentRequest + (*AddAgentResponse)(nil), // 31: inventory.v1.AddAgentResponse + (*ChangeAgentRequest)(nil), // 32: inventory.v1.ChangeAgentRequest + (*ChangeAgentResponse)(nil), // 33: inventory.v1.ChangeAgentResponse + (*AddPMMAgentParams)(nil), // 34: inventory.v1.AddPMMAgentParams + (*AddNodeExporterParams)(nil), // 35: inventory.v1.AddNodeExporterParams + (*ChangeNodeExporterParams)(nil), // 36: inventory.v1.ChangeNodeExporterParams + (*AddMySQLdExporterParams)(nil), // 37: inventory.v1.AddMySQLdExporterParams + (*ChangeMySQLdExporterParams)(nil), // 38: inventory.v1.ChangeMySQLdExporterParams + (*AddMongoDBExporterParams)(nil), // 39: inventory.v1.AddMongoDBExporterParams + (*ChangeMongoDBExporterParams)(nil), // 40: inventory.v1.ChangeMongoDBExporterParams + (*AddPostgresExporterParams)(nil), // 41: inventory.v1.AddPostgresExporterParams + (*ChangePostgresExporterParams)(nil), // 42: inventory.v1.ChangePostgresExporterParams + (*AddProxySQLExporterParams)(nil), // 43: inventory.v1.AddProxySQLExporterParams + (*ChangeProxySQLExporterParams)(nil), // 44: inventory.v1.ChangeProxySQLExporterParams + (*AddQANMySQLPerfSchemaAgentParams)(nil), // 45: inventory.v1.AddQANMySQLPerfSchemaAgentParams + (*ChangeQANMySQLPerfSchemaAgentParams)(nil), // 46: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams + (*AddQANMySQLSlowlogAgentParams)(nil), // 47: inventory.v1.AddQANMySQLSlowlogAgentParams + (*ChangeQANMySQLSlowlogAgentParams)(nil), // 48: inventory.v1.ChangeQANMySQLSlowlogAgentParams + (*AddQANMongoDBProfilerAgentParams)(nil), // 49: inventory.v1.AddQANMongoDBProfilerAgentParams + (*ChangeQANMongoDBProfilerAgentParams)(nil), // 50: inventory.v1.ChangeQANMongoDBProfilerAgentParams + (*AddQANMongoDBMongologAgentParams)(nil), // 51: inventory.v1.AddQANMongoDBMongologAgentParams + (*ChangeQANMongoDBMongologAgentParams)(nil), // 52: inventory.v1.ChangeQANMongoDBMongologAgentParams + (*AddQANPostgreSQLPgStatementsAgentParams)(nil), // 53: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams + (*ChangeQANPostgreSQLPgStatementsAgentParams)(nil), // 54: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams + (*AddQANPostgreSQLPgStatMonitorAgentParams)(nil), // 55: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams + (*ChangeQANPostgreSQLPgStatMonitorAgentParams)(nil), // 56: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams + (*AddRDSExporterParams)(nil), // 57: inventory.v1.AddRDSExporterParams + (*ChangeRDSExporterParams)(nil), // 58: inventory.v1.ChangeRDSExporterParams + (*AddExternalExporterParams)(nil), // 59: inventory.v1.AddExternalExporterParams + (*ChangeExternalExporterParams)(nil), // 60: inventory.v1.ChangeExternalExporterParams + (*AddAzureDatabaseExporterParams)(nil), // 61: inventory.v1.AddAzureDatabaseExporterParams + (*ChangeAzureDatabaseExporterParams)(nil), // 62: inventory.v1.ChangeAzureDatabaseExporterParams + (*ChangeNomadAgentParams)(nil), // 63: inventory.v1.ChangeNomadAgentParams + (*AddValkeyExporterParams)(nil), // 64: inventory.v1.AddValkeyExporterParams + (*ChangeValkeyExporterParams)(nil), // 65: inventory.v1.ChangeValkeyExporterParams + (*AddRTAMongoDBAgentParams)(nil), // 66: inventory.v1.AddRTAMongoDBAgentParams + (*ChangeRTAMongoDBAgentParams)(nil), // 67: inventory.v1.ChangeRTAMongoDBAgentParams + (*RemoveAgentRequest)(nil), // 68: inventory.v1.RemoveAgentRequest + (*RemoveAgentResponse)(nil), // 69: inventory.v1.RemoveAgentResponse + nil, // 70: inventory.v1.PMMAgent.CustomLabelsEntry + nil, // 71: inventory.v1.NodeExporter.CustomLabelsEntry + nil, // 72: inventory.v1.MySQLdExporter.CustomLabelsEntry + nil, // 73: inventory.v1.MySQLdExporter.ExtraDsnParamsEntry + nil, // 74: inventory.v1.MongoDBExporter.CustomLabelsEntry + nil, // 75: inventory.v1.PostgresExporter.CustomLabelsEntry + nil, // 76: inventory.v1.ProxySQLExporter.CustomLabelsEntry + nil, // 77: inventory.v1.ValkeyExporter.CustomLabelsEntry + nil, // 78: inventory.v1.QANMySQLPerfSchemaAgent.CustomLabelsEntry + nil, // 79: inventory.v1.QANMySQLPerfSchemaAgent.ExtraDsnParamsEntry + nil, // 80: inventory.v1.QANMySQLSlowlogAgent.CustomLabelsEntry + nil, // 81: inventory.v1.QANMySQLSlowlogAgent.ExtraDsnParamsEntry + nil, // 82: inventory.v1.DBLogWatcherAgent.CustomLabelsEntry + nil, // 83: inventory.v1.QANMongoDBProfilerAgent.CustomLabelsEntry + nil, // 84: inventory.v1.QANMongoDBMongologAgent.CustomLabelsEntry + nil, // 85: inventory.v1.RTAMongoDBAgent.CustomLabelsEntry + nil, // 86: inventory.v1.QANPostgreSQLPgStatementsAgent.CustomLabelsEntry + nil, // 87: inventory.v1.QANPostgreSQLPgStatMonitorAgent.CustomLabelsEntry + nil, // 88: inventory.v1.RDSExporter.CustomLabelsEntry + nil, // 89: inventory.v1.ExternalExporter.CustomLabelsEntry + nil, // 90: inventory.v1.AzureDatabaseExporter.CustomLabelsEntry + nil, // 91: inventory.v1.AddPMMAgentParams.CustomLabelsEntry + nil, // 92: inventory.v1.AddNodeExporterParams.CustomLabelsEntry + nil, // 93: inventory.v1.AddMySQLdExporterParams.CustomLabelsEntry + nil, // 94: inventory.v1.AddMySQLdExporterParams.ExtraDsnParamsEntry + nil, // 95: inventory.v1.AddMongoDBExporterParams.CustomLabelsEntry + nil, // 96: inventory.v1.AddPostgresExporterParams.CustomLabelsEntry + nil, // 97: inventory.v1.AddProxySQLExporterParams.CustomLabelsEntry + nil, // 98: inventory.v1.AddQANMySQLPerfSchemaAgentParams.CustomLabelsEntry + nil, // 99: inventory.v1.AddQANMySQLPerfSchemaAgentParams.ExtraDsnParamsEntry + nil, // 100: inventory.v1.AddQANMySQLSlowlogAgentParams.CustomLabelsEntry + nil, // 101: inventory.v1.AddQANMySQLSlowlogAgentParams.ExtraDsnParamsEntry + nil, // 102: inventory.v1.AddQANMongoDBProfilerAgentParams.CustomLabelsEntry + nil, // 103: inventory.v1.AddQANMongoDBMongologAgentParams.CustomLabelsEntry + nil, // 104: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.CustomLabelsEntry + nil, // 105: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.CustomLabelsEntry + nil, // 106: inventory.v1.AddRDSExporterParams.CustomLabelsEntry + nil, // 107: inventory.v1.AddExternalExporterParams.CustomLabelsEntry + nil, // 108: inventory.v1.AddAzureDatabaseExporterParams.CustomLabelsEntry + nil, // 109: inventory.v1.AddValkeyExporterParams.CustomLabelsEntry + nil, // 110: inventory.v1.AddRTAMongoDBAgentParams.CustomLabelsEntry + (AgentStatus)(0), // 111: inventory.v1.AgentStatus + (LogLevel)(0), // 112: inventory.v1.LogLevel + (*common.MetricsResolutions)(nil), // 113: common.MetricsResolutions + (*durationpb.Duration)(nil), // 114: google.protobuf.Duration + (*common.StringMap)(nil), // 115: common.StringMap +} var file_inventory_v1_agents_proto_depIdxs = []int32{ - 68, // 0: inventory.v1.PMMAgent.custom_labels:type_name -> inventory.v1.PMMAgent.CustomLabelsEntry - 108, // 1: inventory.v1.VMAgent.status:type_name -> inventory.v1.AgentStatus - 108, // 2: inventory.v1.NomadAgent.status:type_name -> inventory.v1.AgentStatus - 69, // 3: inventory.v1.NodeExporter.custom_labels:type_name -> inventory.v1.NodeExporter.CustomLabelsEntry - 108, // 4: inventory.v1.NodeExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 5: inventory.v1.NodeExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 6: inventory.v1.NodeExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 70, // 7: inventory.v1.MySQLdExporter.custom_labels:type_name -> inventory.v1.MySQLdExporter.CustomLabelsEntry - 108, // 8: inventory.v1.MySQLdExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 9: inventory.v1.MySQLdExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 10: inventory.v1.MySQLdExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 71, // 11: inventory.v1.MySQLdExporter.extra_dsn_params:type_name -> inventory.v1.MySQLdExporter.ExtraDsnParamsEntry - 111, // 12: inventory.v1.MySQLdExporter.connection_timeout:type_name -> google.protobuf.Duration - 72, // 13: inventory.v1.MongoDBExporter.custom_labels:type_name -> inventory.v1.MongoDBExporter.CustomLabelsEntry - 108, // 14: inventory.v1.MongoDBExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 15: inventory.v1.MongoDBExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 16: inventory.v1.MongoDBExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 111, // 17: inventory.v1.MongoDBExporter.connection_timeout:type_name -> google.protobuf.Duration - 73, // 18: inventory.v1.PostgresExporter.custom_labels:type_name -> inventory.v1.PostgresExporter.CustomLabelsEntry - 108, // 19: inventory.v1.PostgresExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 20: inventory.v1.PostgresExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 21: inventory.v1.PostgresExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 111, // 22: inventory.v1.PostgresExporter.connection_timeout:type_name -> google.protobuf.Duration - 74, // 23: inventory.v1.ProxySQLExporter.custom_labels:type_name -> inventory.v1.ProxySQLExporter.CustomLabelsEntry - 108, // 24: inventory.v1.ProxySQLExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 25: inventory.v1.ProxySQLExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 26: inventory.v1.ProxySQLExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 111, // 27: inventory.v1.ProxySQLExporter.connection_timeout:type_name -> google.protobuf.Duration - 75, // 28: inventory.v1.ValkeyExporter.custom_labels:type_name -> inventory.v1.ValkeyExporter.CustomLabelsEntry - 108, // 29: inventory.v1.ValkeyExporter.status:type_name -> inventory.v1.AgentStatus - 110, // 30: inventory.v1.ValkeyExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 111, // 31: inventory.v1.ValkeyExporter.connection_timeout:type_name -> google.protobuf.Duration - 76, // 32: inventory.v1.QANMySQLPerfSchemaAgent.custom_labels:type_name -> inventory.v1.QANMySQLPerfSchemaAgent.CustomLabelsEntry - 108, // 33: inventory.v1.QANMySQLPerfSchemaAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 34: inventory.v1.QANMySQLPerfSchemaAgent.log_level:type_name -> inventory.v1.LogLevel - 77, // 35: inventory.v1.QANMySQLPerfSchemaAgent.extra_dsn_params:type_name -> inventory.v1.QANMySQLPerfSchemaAgent.ExtraDsnParamsEntry - 78, // 36: inventory.v1.QANMySQLSlowlogAgent.custom_labels:type_name -> inventory.v1.QANMySQLSlowlogAgent.CustomLabelsEntry - 108, // 37: inventory.v1.QANMySQLSlowlogAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 38: inventory.v1.QANMySQLSlowlogAgent.log_level:type_name -> inventory.v1.LogLevel - 79, // 39: inventory.v1.QANMySQLSlowlogAgent.extra_dsn_params:type_name -> inventory.v1.QANMySQLSlowlogAgent.ExtraDsnParamsEntry - 80, // 40: inventory.v1.QANMongoDBProfilerAgent.custom_labels:type_name -> inventory.v1.QANMongoDBProfilerAgent.CustomLabelsEntry - 108, // 41: inventory.v1.QANMongoDBProfilerAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 42: inventory.v1.QANMongoDBProfilerAgent.log_level:type_name -> inventory.v1.LogLevel - 81, // 43: inventory.v1.QANMongoDBMongologAgent.custom_labels:type_name -> inventory.v1.QANMongoDBMongologAgent.CustomLabelsEntry - 108, // 44: inventory.v1.QANMongoDBMongologAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 45: inventory.v1.QANMongoDBMongologAgent.log_level:type_name -> inventory.v1.LogLevel - 111, // 46: inventory.v1.RTAOptions.collect_interval:type_name -> google.protobuf.Duration - 82, // 47: inventory.v1.RTAMongoDBAgent.custom_labels:type_name -> inventory.v1.RTAMongoDBAgent.CustomLabelsEntry - 14, // 48: inventory.v1.RTAMongoDBAgent.rta_options:type_name -> inventory.v1.RTAOptions - 108, // 49: inventory.v1.RTAMongoDBAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 50: inventory.v1.RTAMongoDBAgent.log_level:type_name -> inventory.v1.LogLevel - 83, // 51: inventory.v1.QANPostgreSQLPgStatementsAgent.custom_labels:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent.CustomLabelsEntry - 108, // 52: inventory.v1.QANPostgreSQLPgStatementsAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 53: inventory.v1.QANPostgreSQLPgStatementsAgent.log_level:type_name -> inventory.v1.LogLevel - 84, // 54: inventory.v1.QANPostgreSQLPgStatMonitorAgent.custom_labels:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent.CustomLabelsEntry - 108, // 55: inventory.v1.QANPostgreSQLPgStatMonitorAgent.status:type_name -> inventory.v1.AgentStatus - 109, // 56: inventory.v1.QANPostgreSQLPgStatMonitorAgent.log_level:type_name -> inventory.v1.LogLevel - 85, // 57: inventory.v1.RDSExporter.custom_labels:type_name -> inventory.v1.RDSExporter.CustomLabelsEntry - 108, // 58: inventory.v1.RDSExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 59: inventory.v1.RDSExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 60: inventory.v1.RDSExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 86, // 61: inventory.v1.ExternalExporter.custom_labels:type_name -> inventory.v1.ExternalExporter.CustomLabelsEntry - 110, // 62: inventory.v1.ExternalExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 108, // 63: inventory.v1.ExternalExporter.status:type_name -> inventory.v1.AgentStatus - 87, // 64: inventory.v1.AzureDatabaseExporter.custom_labels:type_name -> inventory.v1.AzureDatabaseExporter.CustomLabelsEntry - 108, // 65: inventory.v1.AzureDatabaseExporter.status:type_name -> inventory.v1.AgentStatus - 109, // 66: inventory.v1.AzureDatabaseExporter.log_level:type_name -> inventory.v1.LogLevel - 110, // 67: inventory.v1.AzureDatabaseExporter.metrics_resolutions:type_name -> common.MetricsResolutions - 112, // 68: inventory.v1.ChangeCommonAgentParams.custom_labels:type_name -> common.StringMap - 110, // 69: inventory.v1.ChangeCommonAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 0, // 70: inventory.v1.ListAgentsRequest.agent_type:type_name -> inventory.v1.AgentType - 1, // 71: inventory.v1.ListAgentsResponse.pmm_agent:type_name -> inventory.v1.PMMAgent - 2, // 72: inventory.v1.ListAgentsResponse.vm_agent:type_name -> inventory.v1.VMAgent - 4, // 73: inventory.v1.ListAgentsResponse.node_exporter:type_name -> inventory.v1.NodeExporter - 5, // 74: inventory.v1.ListAgentsResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter - 6, // 75: inventory.v1.ListAgentsResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter - 7, // 76: inventory.v1.ListAgentsResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter - 8, // 77: inventory.v1.ListAgentsResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter - 10, // 78: inventory.v1.ListAgentsResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent - 11, // 79: inventory.v1.ListAgentsResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent - 12, // 80: inventory.v1.ListAgentsResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent - 13, // 81: inventory.v1.ListAgentsResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent - 16, // 82: inventory.v1.ListAgentsResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent - 17, // 83: inventory.v1.ListAgentsResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent - 19, // 84: inventory.v1.ListAgentsResponse.external_exporter:type_name -> inventory.v1.ExternalExporter - 18, // 85: inventory.v1.ListAgentsResponse.rds_exporter:type_name -> inventory.v1.RDSExporter - 20, // 86: inventory.v1.ListAgentsResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter - 3, // 87: inventory.v1.ListAgentsResponse.nomad_agent:type_name -> inventory.v1.NomadAgent - 9, // 88: inventory.v1.ListAgentsResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter - 15, // 89: inventory.v1.ListAgentsResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent - 1, // 90: inventory.v1.GetAgentResponse.pmm_agent:type_name -> inventory.v1.PMMAgent - 2, // 91: inventory.v1.GetAgentResponse.vmagent:type_name -> inventory.v1.VMAgent - 4, // 92: inventory.v1.GetAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter - 5, // 93: inventory.v1.GetAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter - 6, // 94: inventory.v1.GetAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter - 7, // 95: inventory.v1.GetAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter - 8, // 96: inventory.v1.GetAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter - 10, // 97: inventory.v1.GetAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent - 11, // 98: inventory.v1.GetAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent - 12, // 99: inventory.v1.GetAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent - 13, // 100: inventory.v1.GetAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent - 16, // 101: inventory.v1.GetAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent - 17, // 102: inventory.v1.GetAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent - 19, // 103: inventory.v1.GetAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter - 18, // 104: inventory.v1.GetAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter - 20, // 105: inventory.v1.GetAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter - 3, // 106: inventory.v1.GetAgentResponse.nomad_agent:type_name -> inventory.v1.NomadAgent - 9, // 107: inventory.v1.GetAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter - 15, // 108: inventory.v1.GetAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent - 32, // 109: inventory.v1.AddAgentRequest.pmm_agent:type_name -> inventory.v1.AddPMMAgentParams - 33, // 110: inventory.v1.AddAgentRequest.node_exporter:type_name -> inventory.v1.AddNodeExporterParams - 35, // 111: inventory.v1.AddAgentRequest.mysqld_exporter:type_name -> inventory.v1.AddMySQLdExporterParams - 37, // 112: inventory.v1.AddAgentRequest.mongodb_exporter:type_name -> inventory.v1.AddMongoDBExporterParams - 39, // 113: inventory.v1.AddAgentRequest.postgres_exporter:type_name -> inventory.v1.AddPostgresExporterParams - 41, // 114: inventory.v1.AddAgentRequest.proxysql_exporter:type_name -> inventory.v1.AddProxySQLExporterParams - 57, // 115: inventory.v1.AddAgentRequest.external_exporter:type_name -> inventory.v1.AddExternalExporterParams - 55, // 116: inventory.v1.AddAgentRequest.rds_exporter:type_name -> inventory.v1.AddRDSExporterParams - 59, // 117: inventory.v1.AddAgentRequest.azure_database_exporter:type_name -> inventory.v1.AddAzureDatabaseExporterParams - 43, // 118: inventory.v1.AddAgentRequest.qan_mysql_perfschema_agent:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams - 45, // 119: inventory.v1.AddAgentRequest.qan_mysql_slowlog_agent:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams - 47, // 120: inventory.v1.AddAgentRequest.qan_mongodb_profiler_agent:type_name -> inventory.v1.AddQANMongoDBProfilerAgentParams - 49, // 121: inventory.v1.AddAgentRequest.qan_mongodb_mongolog_agent:type_name -> inventory.v1.AddQANMongoDBMongologAgentParams - 51, // 122: inventory.v1.AddAgentRequest.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.AddQANPostgreSQLPgStatementsAgentParams - 53, // 123: inventory.v1.AddAgentRequest.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams - 62, // 124: inventory.v1.AddAgentRequest.valkey_exporter:type_name -> inventory.v1.AddValkeyExporterParams - 64, // 125: inventory.v1.AddAgentRequest.rta_mongodb_agent:type_name -> inventory.v1.AddRTAMongoDBAgentParams - 1, // 126: inventory.v1.AddAgentResponse.pmm_agent:type_name -> inventory.v1.PMMAgent - 4, // 127: inventory.v1.AddAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter - 5, // 128: inventory.v1.AddAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter - 6, // 129: inventory.v1.AddAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter - 7, // 130: inventory.v1.AddAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter - 8, // 131: inventory.v1.AddAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter - 19, // 132: inventory.v1.AddAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter - 18, // 133: inventory.v1.AddAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter - 20, // 134: inventory.v1.AddAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter - 10, // 135: inventory.v1.AddAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent - 11, // 136: inventory.v1.AddAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent - 12, // 137: inventory.v1.AddAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent - 13, // 138: inventory.v1.AddAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent - 16, // 139: inventory.v1.AddAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent - 17, // 140: inventory.v1.AddAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent - 9, // 141: inventory.v1.AddAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter - 15, // 142: inventory.v1.AddAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent - 34, // 143: inventory.v1.ChangeAgentRequest.node_exporter:type_name -> inventory.v1.ChangeNodeExporterParams - 36, // 144: inventory.v1.ChangeAgentRequest.mysqld_exporter:type_name -> inventory.v1.ChangeMySQLdExporterParams - 38, // 145: inventory.v1.ChangeAgentRequest.mongodb_exporter:type_name -> inventory.v1.ChangeMongoDBExporterParams - 40, // 146: inventory.v1.ChangeAgentRequest.postgres_exporter:type_name -> inventory.v1.ChangePostgresExporterParams - 42, // 147: inventory.v1.ChangeAgentRequest.proxysql_exporter:type_name -> inventory.v1.ChangeProxySQLExporterParams - 58, // 148: inventory.v1.ChangeAgentRequest.external_exporter:type_name -> inventory.v1.ChangeExternalExporterParams - 56, // 149: inventory.v1.ChangeAgentRequest.rds_exporter:type_name -> inventory.v1.ChangeRDSExporterParams - 60, // 150: inventory.v1.ChangeAgentRequest.azure_database_exporter:type_name -> inventory.v1.ChangeAzureDatabaseExporterParams - 44, // 151: inventory.v1.ChangeAgentRequest.qan_mysql_perfschema_agent:type_name -> inventory.v1.ChangeQANMySQLPerfSchemaAgentParams - 46, // 152: inventory.v1.ChangeAgentRequest.qan_mysql_slowlog_agent:type_name -> inventory.v1.ChangeQANMySQLSlowlogAgentParams - 48, // 153: inventory.v1.ChangeAgentRequest.qan_mongodb_profiler_agent:type_name -> inventory.v1.ChangeQANMongoDBProfilerAgentParams - 50, // 154: inventory.v1.ChangeAgentRequest.qan_mongodb_mongolog_agent:type_name -> inventory.v1.ChangeQANMongoDBMongologAgentParams - 52, // 155: inventory.v1.ChangeAgentRequest.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams - 54, // 156: inventory.v1.ChangeAgentRequest.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams - 61, // 157: inventory.v1.ChangeAgentRequest.nomad_agent:type_name -> inventory.v1.ChangeNomadAgentParams - 63, // 158: inventory.v1.ChangeAgentRequest.valkey_exporter:type_name -> inventory.v1.ChangeValkeyExporterParams - 65, // 159: inventory.v1.ChangeAgentRequest.rta_mongodb_agent:type_name -> inventory.v1.ChangeRTAMongoDBAgentParams - 4, // 160: inventory.v1.ChangeAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter - 5, // 161: inventory.v1.ChangeAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter - 6, // 162: inventory.v1.ChangeAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter - 7, // 163: inventory.v1.ChangeAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter - 8, // 164: inventory.v1.ChangeAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter - 19, // 165: inventory.v1.ChangeAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter - 18, // 166: inventory.v1.ChangeAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter - 20, // 167: inventory.v1.ChangeAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter - 10, // 168: inventory.v1.ChangeAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent - 11, // 169: inventory.v1.ChangeAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent - 12, // 170: inventory.v1.ChangeAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent - 13, // 171: inventory.v1.ChangeAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent - 16, // 172: inventory.v1.ChangeAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent - 17, // 173: inventory.v1.ChangeAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent - 3, // 174: inventory.v1.ChangeAgentResponse.nomad_agent:type_name -> inventory.v1.NomadAgent - 9, // 175: inventory.v1.ChangeAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter - 15, // 176: inventory.v1.ChangeAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent - 88, // 177: inventory.v1.AddPMMAgentParams.custom_labels:type_name -> inventory.v1.AddPMMAgentParams.CustomLabelsEntry - 89, // 178: inventory.v1.AddNodeExporterParams.custom_labels:type_name -> inventory.v1.AddNodeExporterParams.CustomLabelsEntry - 109, // 179: inventory.v1.AddNodeExporterParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 180: inventory.v1.ChangeNodeExporterParams.custom_labels:type_name -> common.StringMap - 110, // 181: inventory.v1.ChangeNodeExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 182: inventory.v1.ChangeNodeExporterParams.log_level:type_name -> inventory.v1.LogLevel - 90, // 183: inventory.v1.AddMySQLdExporterParams.custom_labels:type_name -> inventory.v1.AddMySQLdExporterParams.CustomLabelsEntry - 109, // 184: inventory.v1.AddMySQLdExporterParams.log_level:type_name -> inventory.v1.LogLevel - 91, // 185: inventory.v1.AddMySQLdExporterParams.extra_dsn_params:type_name -> inventory.v1.AddMySQLdExporterParams.ExtraDsnParamsEntry - 111, // 186: inventory.v1.AddMySQLdExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 112, // 187: inventory.v1.ChangeMySQLdExporterParams.custom_labels:type_name -> common.StringMap - 110, // 188: inventory.v1.ChangeMySQLdExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 189: inventory.v1.ChangeMySQLdExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 190: inventory.v1.ChangeMySQLdExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 92, // 191: inventory.v1.AddMongoDBExporterParams.custom_labels:type_name -> inventory.v1.AddMongoDBExporterParams.CustomLabelsEntry - 109, // 192: inventory.v1.AddMongoDBExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 193: inventory.v1.AddMongoDBExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 112, // 194: inventory.v1.ChangeMongoDBExporterParams.custom_labels:type_name -> common.StringMap - 110, // 195: inventory.v1.ChangeMongoDBExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 196: inventory.v1.ChangeMongoDBExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 197: inventory.v1.ChangeMongoDBExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 93, // 198: inventory.v1.AddPostgresExporterParams.custom_labels:type_name -> inventory.v1.AddPostgresExporterParams.CustomLabelsEntry - 109, // 199: inventory.v1.AddPostgresExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 200: inventory.v1.AddPostgresExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 112, // 201: inventory.v1.ChangePostgresExporterParams.custom_labels:type_name -> common.StringMap - 110, // 202: inventory.v1.ChangePostgresExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 203: inventory.v1.ChangePostgresExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 204: inventory.v1.ChangePostgresExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 94, // 205: inventory.v1.AddProxySQLExporterParams.custom_labels:type_name -> inventory.v1.AddProxySQLExporterParams.CustomLabelsEntry - 109, // 206: inventory.v1.AddProxySQLExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 207: inventory.v1.AddProxySQLExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 112, // 208: inventory.v1.ChangeProxySQLExporterParams.custom_labels:type_name -> common.StringMap - 110, // 209: inventory.v1.ChangeProxySQLExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 210: inventory.v1.ChangeProxySQLExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 211: inventory.v1.ChangeProxySQLExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 95, // 212: inventory.v1.AddQANMySQLPerfSchemaAgentParams.custom_labels:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams.CustomLabelsEntry - 109, // 213: inventory.v1.AddQANMySQLPerfSchemaAgentParams.log_level:type_name -> inventory.v1.LogLevel - 96, // 214: inventory.v1.AddQANMySQLPerfSchemaAgentParams.extra_dsn_params:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams.ExtraDsnParamsEntry - 112, // 215: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.custom_labels:type_name -> common.StringMap - 110, // 216: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 217: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.log_level:type_name -> inventory.v1.LogLevel - 97, // 218: inventory.v1.AddQANMySQLSlowlogAgentParams.custom_labels:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams.CustomLabelsEntry - 109, // 219: inventory.v1.AddQANMySQLSlowlogAgentParams.log_level:type_name -> inventory.v1.LogLevel - 98, // 220: inventory.v1.AddQANMySQLSlowlogAgentParams.extra_dsn_params:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams.ExtraDsnParamsEntry - 112, // 221: inventory.v1.ChangeQANMySQLSlowlogAgentParams.custom_labels:type_name -> common.StringMap - 110, // 222: inventory.v1.ChangeQANMySQLSlowlogAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 223: inventory.v1.ChangeQANMySQLSlowlogAgentParams.log_level:type_name -> inventory.v1.LogLevel - 99, // 224: inventory.v1.AddQANMongoDBProfilerAgentParams.custom_labels:type_name -> inventory.v1.AddQANMongoDBProfilerAgentParams.CustomLabelsEntry - 109, // 225: inventory.v1.AddQANMongoDBProfilerAgentParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 226: inventory.v1.ChangeQANMongoDBProfilerAgentParams.custom_labels:type_name -> common.StringMap - 110, // 227: inventory.v1.ChangeQANMongoDBProfilerAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 228: inventory.v1.ChangeQANMongoDBProfilerAgentParams.log_level:type_name -> inventory.v1.LogLevel - 100, // 229: inventory.v1.AddQANMongoDBMongologAgentParams.custom_labels:type_name -> inventory.v1.AddQANMongoDBMongologAgentParams.CustomLabelsEntry - 109, // 230: inventory.v1.AddQANMongoDBMongologAgentParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 231: inventory.v1.ChangeQANMongoDBMongologAgentParams.custom_labels:type_name -> common.StringMap - 110, // 232: inventory.v1.ChangeQANMongoDBMongologAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 233: inventory.v1.ChangeQANMongoDBMongologAgentParams.log_level:type_name -> inventory.v1.LogLevel - 101, // 234: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.custom_labels:type_name -> inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.CustomLabelsEntry - 109, // 235: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 236: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.custom_labels:type_name -> common.StringMap - 110, // 237: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 238: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.log_level:type_name -> inventory.v1.LogLevel - 102, // 239: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.custom_labels:type_name -> inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.CustomLabelsEntry - 109, // 240: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 241: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.custom_labels:type_name -> common.StringMap - 110, // 242: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 243: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.log_level:type_name -> inventory.v1.LogLevel - 103, // 244: inventory.v1.AddRDSExporterParams.custom_labels:type_name -> inventory.v1.AddRDSExporterParams.CustomLabelsEntry - 109, // 245: inventory.v1.AddRDSExporterParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 246: inventory.v1.ChangeRDSExporterParams.custom_labels:type_name -> common.StringMap - 110, // 247: inventory.v1.ChangeRDSExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 248: inventory.v1.ChangeRDSExporterParams.log_level:type_name -> inventory.v1.LogLevel - 104, // 249: inventory.v1.AddExternalExporterParams.custom_labels:type_name -> inventory.v1.AddExternalExporterParams.CustomLabelsEntry - 112, // 250: inventory.v1.ChangeExternalExporterParams.custom_labels:type_name -> common.StringMap - 110, // 251: inventory.v1.ChangeExternalExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 105, // 252: inventory.v1.AddAzureDatabaseExporterParams.custom_labels:type_name -> inventory.v1.AddAzureDatabaseExporterParams.CustomLabelsEntry - 109, // 253: inventory.v1.AddAzureDatabaseExporterParams.log_level:type_name -> inventory.v1.LogLevel - 112, // 254: inventory.v1.ChangeAzureDatabaseExporterParams.custom_labels:type_name -> common.StringMap - 110, // 255: inventory.v1.ChangeAzureDatabaseExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 256: inventory.v1.ChangeAzureDatabaseExporterParams.log_level:type_name -> inventory.v1.LogLevel - 106, // 257: inventory.v1.AddValkeyExporterParams.custom_labels:type_name -> inventory.v1.AddValkeyExporterParams.CustomLabelsEntry - 109, // 258: inventory.v1.AddValkeyExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 259: inventory.v1.AddValkeyExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 112, // 260: inventory.v1.ChangeValkeyExporterParams.custom_labels:type_name -> common.StringMap - 110, // 261: inventory.v1.ChangeValkeyExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions - 109, // 262: inventory.v1.ChangeValkeyExporterParams.log_level:type_name -> inventory.v1.LogLevel - 111, // 263: inventory.v1.ChangeValkeyExporterParams.connection_timeout:type_name -> google.protobuf.Duration - 107, // 264: inventory.v1.AddRTAMongoDBAgentParams.custom_labels:type_name -> inventory.v1.AddRTAMongoDBAgentParams.CustomLabelsEntry - 109, // 265: inventory.v1.AddRTAMongoDBAgentParams.log_level:type_name -> inventory.v1.LogLevel - 14, // 266: inventory.v1.AddRTAMongoDBAgentParams.rta_options:type_name -> inventory.v1.RTAOptions - 112, // 267: inventory.v1.ChangeRTAMongoDBAgentParams.custom_labels:type_name -> common.StringMap - 109, // 268: inventory.v1.ChangeRTAMongoDBAgentParams.log_level:type_name -> inventory.v1.LogLevel - 14, // 269: inventory.v1.ChangeRTAMongoDBAgentParams.rta_options:type_name -> inventory.v1.RTAOptions - 22, // 270: inventory.v1.AgentsService.ListAgents:input_type -> inventory.v1.ListAgentsRequest - 24, // 271: inventory.v1.AgentsService.GetAgent:input_type -> inventory.v1.GetAgentRequest - 26, // 272: inventory.v1.AgentsService.GetAgentLogs:input_type -> inventory.v1.GetAgentLogsRequest - 28, // 273: inventory.v1.AgentsService.AddAgent:input_type -> inventory.v1.AddAgentRequest - 30, // 274: inventory.v1.AgentsService.ChangeAgent:input_type -> inventory.v1.ChangeAgentRequest - 66, // 275: inventory.v1.AgentsService.RemoveAgent:input_type -> inventory.v1.RemoveAgentRequest - 23, // 276: inventory.v1.AgentsService.ListAgents:output_type -> inventory.v1.ListAgentsResponse - 25, // 277: inventory.v1.AgentsService.GetAgent:output_type -> inventory.v1.GetAgentResponse - 27, // 278: inventory.v1.AgentsService.GetAgentLogs:output_type -> inventory.v1.GetAgentLogsResponse - 29, // 279: inventory.v1.AgentsService.AddAgent:output_type -> inventory.v1.AddAgentResponse - 31, // 280: inventory.v1.AgentsService.ChangeAgent:output_type -> inventory.v1.ChangeAgentResponse - 67, // 281: inventory.v1.AgentsService.RemoveAgent:output_type -> inventory.v1.RemoveAgentResponse - 276, // [276:282] is the sub-list for method output_type - 270, // [270:276] is the sub-list for method input_type - 270, // [270:270] is the sub-list for extension type_name - 270, // [270:270] is the sub-list for extension extendee - 0, // [0:270] is the sub-list for field type_name + 70, // 0: inventory.v1.PMMAgent.custom_labels:type_name -> inventory.v1.PMMAgent.CustomLabelsEntry + 111, // 1: inventory.v1.VMAgent.status:type_name -> inventory.v1.AgentStatus + 111, // 2: inventory.v1.NomadAgent.status:type_name -> inventory.v1.AgentStatus + 71, // 3: inventory.v1.NodeExporter.custom_labels:type_name -> inventory.v1.NodeExporter.CustomLabelsEntry + 111, // 4: inventory.v1.NodeExporter.status:type_name -> inventory.v1.AgentStatus + 112, // 5: inventory.v1.NodeExporter.log_level:type_name -> inventory.v1.LogLevel + 113, // 6: inventory.v1.NodeExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 72, // 7: inventory.v1.MySQLdExporter.custom_labels:type_name -> inventory.v1.MySQLdExporter.CustomLabelsEntry + 111, // 8: inventory.v1.MySQLdExporter.status:type_name -> inventory.v1.AgentStatus + 112, // 9: inventory.v1.MySQLdExporter.log_level:type_name -> inventory.v1.LogLevel + 113, // 10: inventory.v1.MySQLdExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 73, // 11: inventory.v1.MySQLdExporter.extra_dsn_params:type_name -> inventory.v1.MySQLdExporter.ExtraDsnParamsEntry + 114, // 12: inventory.v1.MySQLdExporter.connection_timeout:type_name -> google.protobuf.Duration + 74, // 13: inventory.v1.MongoDBExporter.custom_labels:type_name -> inventory.v1.MongoDBExporter.CustomLabelsEntry + 111, // 14: inventory.v1.MongoDBExporter.status:type_name -> inventory.v1.AgentStatus + 112, // 15: inventory.v1.MongoDBExporter.log_level:type_name -> inventory.v1.LogLevel + 113, // 16: inventory.v1.MongoDBExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 114, // 17: inventory.v1.MongoDBExporter.connection_timeout:type_name -> google.protobuf.Duration + 75, // 18: inventory.v1.PostgresExporter.custom_labels:type_name -> inventory.v1.PostgresExporter.CustomLabelsEntry + 111, // 19: inventory.v1.PostgresExporter.status:type_name -> inventory.v1.AgentStatus + 112, // 20: inventory.v1.PostgresExporter.log_level:type_name -> inventory.v1.LogLevel + 113, // 21: inventory.v1.PostgresExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 114, // 22: inventory.v1.PostgresExporter.connection_timeout:type_name -> google.protobuf.Duration + 76, // 23: inventory.v1.ProxySQLExporter.custom_labels:type_name -> inventory.v1.ProxySQLExporter.CustomLabelsEntry + 111, // 24: inventory.v1.ProxySQLExporter.status:type_name -> inventory.v1.AgentStatus + 112, // 25: inventory.v1.ProxySQLExporter.log_level:type_name -> inventory.v1.LogLevel + 113, // 26: inventory.v1.ProxySQLExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 114, // 27: inventory.v1.ProxySQLExporter.connection_timeout:type_name -> google.protobuf.Duration + 77, // 28: inventory.v1.ValkeyExporter.custom_labels:type_name -> inventory.v1.ValkeyExporter.CustomLabelsEntry + 111, // 29: inventory.v1.ValkeyExporter.status:type_name -> inventory.v1.AgentStatus + 113, // 30: inventory.v1.ValkeyExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 114, // 31: inventory.v1.ValkeyExporter.connection_timeout:type_name -> google.protobuf.Duration + 78, // 32: inventory.v1.QANMySQLPerfSchemaAgent.custom_labels:type_name -> inventory.v1.QANMySQLPerfSchemaAgent.CustomLabelsEntry + 111, // 33: inventory.v1.QANMySQLPerfSchemaAgent.status:type_name -> inventory.v1.AgentStatus + 112, // 34: inventory.v1.QANMySQLPerfSchemaAgent.log_level:type_name -> inventory.v1.LogLevel + 79, // 35: inventory.v1.QANMySQLPerfSchemaAgent.extra_dsn_params:type_name -> inventory.v1.QANMySQLPerfSchemaAgent.ExtraDsnParamsEntry + 80, // 36: inventory.v1.QANMySQLSlowlogAgent.custom_labels:type_name -> inventory.v1.QANMySQLSlowlogAgent.CustomLabelsEntry + 111, // 37: inventory.v1.QANMySQLSlowlogAgent.status:type_name -> inventory.v1.AgentStatus + 112, // 38: inventory.v1.QANMySQLSlowlogAgent.log_level:type_name -> inventory.v1.LogLevel + 81, // 39: inventory.v1.QANMySQLSlowlogAgent.extra_dsn_params:type_name -> inventory.v1.QANMySQLSlowlogAgent.ExtraDsnParamsEntry + 1, // 40: inventory.v1.DBLogWatcherAgent.watched_logs:type_name -> inventory.v1.WatchedLog + 82, // 41: inventory.v1.DBLogWatcherAgent.custom_labels:type_name -> inventory.v1.DBLogWatcherAgent.CustomLabelsEntry + 111, // 42: inventory.v1.DBLogWatcherAgent.status:type_name -> inventory.v1.AgentStatus + 112, // 43: inventory.v1.DBLogWatcherAgent.log_level:type_name -> inventory.v1.LogLevel + 83, // 44: inventory.v1.QANMongoDBProfilerAgent.custom_labels:type_name -> inventory.v1.QANMongoDBProfilerAgent.CustomLabelsEntry + 111, // 45: inventory.v1.QANMongoDBProfilerAgent.status:type_name -> inventory.v1.AgentStatus + 112, // 46: inventory.v1.QANMongoDBProfilerAgent.log_level:type_name -> inventory.v1.LogLevel + 84, // 47: inventory.v1.QANMongoDBMongologAgent.custom_labels:type_name -> inventory.v1.QANMongoDBMongologAgent.CustomLabelsEntry + 111, // 48: inventory.v1.QANMongoDBMongologAgent.status:type_name -> inventory.v1.AgentStatus + 112, // 49: inventory.v1.QANMongoDBMongologAgent.log_level:type_name -> inventory.v1.LogLevel + 114, // 50: inventory.v1.RTAOptions.collect_interval:type_name -> google.protobuf.Duration + 85, // 51: inventory.v1.RTAMongoDBAgent.custom_labels:type_name -> inventory.v1.RTAMongoDBAgent.CustomLabelsEntry + 16, // 52: inventory.v1.RTAMongoDBAgent.rta_options:type_name -> inventory.v1.RTAOptions + 111, // 53: inventory.v1.RTAMongoDBAgent.status:type_name -> inventory.v1.AgentStatus + 112, // 54: inventory.v1.RTAMongoDBAgent.log_level:type_name -> inventory.v1.LogLevel + 86, // 55: inventory.v1.QANPostgreSQLPgStatementsAgent.custom_labels:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent.CustomLabelsEntry + 111, // 56: inventory.v1.QANPostgreSQLPgStatementsAgent.status:type_name -> inventory.v1.AgentStatus + 112, // 57: inventory.v1.QANPostgreSQLPgStatementsAgent.log_level:type_name -> inventory.v1.LogLevel + 87, // 58: inventory.v1.QANPostgreSQLPgStatMonitorAgent.custom_labels:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent.CustomLabelsEntry + 111, // 59: inventory.v1.QANPostgreSQLPgStatMonitorAgent.status:type_name -> inventory.v1.AgentStatus + 112, // 60: inventory.v1.QANPostgreSQLPgStatMonitorAgent.log_level:type_name -> inventory.v1.LogLevel + 88, // 61: inventory.v1.RDSExporter.custom_labels:type_name -> inventory.v1.RDSExporter.CustomLabelsEntry + 111, // 62: inventory.v1.RDSExporter.status:type_name -> inventory.v1.AgentStatus + 112, // 63: inventory.v1.RDSExporter.log_level:type_name -> inventory.v1.LogLevel + 113, // 64: inventory.v1.RDSExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 89, // 65: inventory.v1.ExternalExporter.custom_labels:type_name -> inventory.v1.ExternalExporter.CustomLabelsEntry + 113, // 66: inventory.v1.ExternalExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 111, // 67: inventory.v1.ExternalExporter.status:type_name -> inventory.v1.AgentStatus + 90, // 68: inventory.v1.AzureDatabaseExporter.custom_labels:type_name -> inventory.v1.AzureDatabaseExporter.CustomLabelsEntry + 111, // 69: inventory.v1.AzureDatabaseExporter.status:type_name -> inventory.v1.AgentStatus + 112, // 70: inventory.v1.AzureDatabaseExporter.log_level:type_name -> inventory.v1.LogLevel + 113, // 71: inventory.v1.AzureDatabaseExporter.metrics_resolutions:type_name -> common.MetricsResolutions + 115, // 72: inventory.v1.ChangeCommonAgentParams.custom_labels:type_name -> common.StringMap + 113, // 73: inventory.v1.ChangeCommonAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 0, // 74: inventory.v1.ListAgentsRequest.agent_type:type_name -> inventory.v1.AgentType + 2, // 75: inventory.v1.ListAgentsResponse.pmm_agent:type_name -> inventory.v1.PMMAgent + 3, // 76: inventory.v1.ListAgentsResponse.vm_agent:type_name -> inventory.v1.VMAgent + 5, // 77: inventory.v1.ListAgentsResponse.node_exporter:type_name -> inventory.v1.NodeExporter + 6, // 78: inventory.v1.ListAgentsResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter + 7, // 79: inventory.v1.ListAgentsResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter + 8, // 80: inventory.v1.ListAgentsResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter + 9, // 81: inventory.v1.ListAgentsResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter + 11, // 82: inventory.v1.ListAgentsResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent + 12, // 83: inventory.v1.ListAgentsResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent + 14, // 84: inventory.v1.ListAgentsResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent + 15, // 85: inventory.v1.ListAgentsResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent + 18, // 86: inventory.v1.ListAgentsResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent + 19, // 87: inventory.v1.ListAgentsResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent + 21, // 88: inventory.v1.ListAgentsResponse.external_exporter:type_name -> inventory.v1.ExternalExporter + 20, // 89: inventory.v1.ListAgentsResponse.rds_exporter:type_name -> inventory.v1.RDSExporter + 22, // 90: inventory.v1.ListAgentsResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter + 4, // 91: inventory.v1.ListAgentsResponse.nomad_agent:type_name -> inventory.v1.NomadAgent + 10, // 92: inventory.v1.ListAgentsResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter + 17, // 93: inventory.v1.ListAgentsResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent + 13, // 94: inventory.v1.ListAgentsResponse.db_log_watcher_agent:type_name -> inventory.v1.DBLogWatcherAgent + 2, // 95: inventory.v1.GetAgentResponse.pmm_agent:type_name -> inventory.v1.PMMAgent + 3, // 96: inventory.v1.GetAgentResponse.vmagent:type_name -> inventory.v1.VMAgent + 5, // 97: inventory.v1.GetAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter + 6, // 98: inventory.v1.GetAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter + 7, // 99: inventory.v1.GetAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter + 8, // 100: inventory.v1.GetAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter + 9, // 101: inventory.v1.GetAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter + 11, // 102: inventory.v1.GetAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent + 12, // 103: inventory.v1.GetAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent + 14, // 104: inventory.v1.GetAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent + 15, // 105: inventory.v1.GetAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent + 18, // 106: inventory.v1.GetAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent + 19, // 107: inventory.v1.GetAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent + 21, // 108: inventory.v1.GetAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter + 20, // 109: inventory.v1.GetAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter + 22, // 110: inventory.v1.GetAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter + 4, // 111: inventory.v1.GetAgentResponse.nomad_agent:type_name -> inventory.v1.NomadAgent + 10, // 112: inventory.v1.GetAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter + 17, // 113: inventory.v1.GetAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent + 13, // 114: inventory.v1.GetAgentResponse.db_log_watcher_agent:type_name -> inventory.v1.DBLogWatcherAgent + 34, // 115: inventory.v1.AddAgentRequest.pmm_agent:type_name -> inventory.v1.AddPMMAgentParams + 35, // 116: inventory.v1.AddAgentRequest.node_exporter:type_name -> inventory.v1.AddNodeExporterParams + 37, // 117: inventory.v1.AddAgentRequest.mysqld_exporter:type_name -> inventory.v1.AddMySQLdExporterParams + 39, // 118: inventory.v1.AddAgentRequest.mongodb_exporter:type_name -> inventory.v1.AddMongoDBExporterParams + 41, // 119: inventory.v1.AddAgentRequest.postgres_exporter:type_name -> inventory.v1.AddPostgresExporterParams + 43, // 120: inventory.v1.AddAgentRequest.proxysql_exporter:type_name -> inventory.v1.AddProxySQLExporterParams + 59, // 121: inventory.v1.AddAgentRequest.external_exporter:type_name -> inventory.v1.AddExternalExporterParams + 57, // 122: inventory.v1.AddAgentRequest.rds_exporter:type_name -> inventory.v1.AddRDSExporterParams + 61, // 123: inventory.v1.AddAgentRequest.azure_database_exporter:type_name -> inventory.v1.AddAzureDatabaseExporterParams + 45, // 124: inventory.v1.AddAgentRequest.qan_mysql_perfschema_agent:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams + 47, // 125: inventory.v1.AddAgentRequest.qan_mysql_slowlog_agent:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams + 49, // 126: inventory.v1.AddAgentRequest.qan_mongodb_profiler_agent:type_name -> inventory.v1.AddQANMongoDBProfilerAgentParams + 51, // 127: inventory.v1.AddAgentRequest.qan_mongodb_mongolog_agent:type_name -> inventory.v1.AddQANMongoDBMongologAgentParams + 53, // 128: inventory.v1.AddAgentRequest.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.AddQANPostgreSQLPgStatementsAgentParams + 55, // 129: inventory.v1.AddAgentRequest.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams + 64, // 130: inventory.v1.AddAgentRequest.valkey_exporter:type_name -> inventory.v1.AddValkeyExporterParams + 66, // 131: inventory.v1.AddAgentRequest.rta_mongodb_agent:type_name -> inventory.v1.AddRTAMongoDBAgentParams + 2, // 132: inventory.v1.AddAgentResponse.pmm_agent:type_name -> inventory.v1.PMMAgent + 5, // 133: inventory.v1.AddAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter + 6, // 134: inventory.v1.AddAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter + 7, // 135: inventory.v1.AddAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter + 8, // 136: inventory.v1.AddAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter + 9, // 137: inventory.v1.AddAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter + 21, // 138: inventory.v1.AddAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter + 20, // 139: inventory.v1.AddAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter + 22, // 140: inventory.v1.AddAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter + 11, // 141: inventory.v1.AddAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent + 12, // 142: inventory.v1.AddAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent + 14, // 143: inventory.v1.AddAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent + 15, // 144: inventory.v1.AddAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent + 18, // 145: inventory.v1.AddAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent + 19, // 146: inventory.v1.AddAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent + 10, // 147: inventory.v1.AddAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter + 17, // 148: inventory.v1.AddAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent + 36, // 149: inventory.v1.ChangeAgentRequest.node_exporter:type_name -> inventory.v1.ChangeNodeExporterParams + 38, // 150: inventory.v1.ChangeAgentRequest.mysqld_exporter:type_name -> inventory.v1.ChangeMySQLdExporterParams + 40, // 151: inventory.v1.ChangeAgentRequest.mongodb_exporter:type_name -> inventory.v1.ChangeMongoDBExporterParams + 42, // 152: inventory.v1.ChangeAgentRequest.postgres_exporter:type_name -> inventory.v1.ChangePostgresExporterParams + 44, // 153: inventory.v1.ChangeAgentRequest.proxysql_exporter:type_name -> inventory.v1.ChangeProxySQLExporterParams + 60, // 154: inventory.v1.ChangeAgentRequest.external_exporter:type_name -> inventory.v1.ChangeExternalExporterParams + 58, // 155: inventory.v1.ChangeAgentRequest.rds_exporter:type_name -> inventory.v1.ChangeRDSExporterParams + 62, // 156: inventory.v1.ChangeAgentRequest.azure_database_exporter:type_name -> inventory.v1.ChangeAzureDatabaseExporterParams + 46, // 157: inventory.v1.ChangeAgentRequest.qan_mysql_perfschema_agent:type_name -> inventory.v1.ChangeQANMySQLPerfSchemaAgentParams + 48, // 158: inventory.v1.ChangeAgentRequest.qan_mysql_slowlog_agent:type_name -> inventory.v1.ChangeQANMySQLSlowlogAgentParams + 50, // 159: inventory.v1.ChangeAgentRequest.qan_mongodb_profiler_agent:type_name -> inventory.v1.ChangeQANMongoDBProfilerAgentParams + 52, // 160: inventory.v1.ChangeAgentRequest.qan_mongodb_mongolog_agent:type_name -> inventory.v1.ChangeQANMongoDBMongologAgentParams + 54, // 161: inventory.v1.ChangeAgentRequest.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams + 56, // 162: inventory.v1.ChangeAgentRequest.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams + 63, // 163: inventory.v1.ChangeAgentRequest.nomad_agent:type_name -> inventory.v1.ChangeNomadAgentParams + 65, // 164: inventory.v1.ChangeAgentRequest.valkey_exporter:type_name -> inventory.v1.ChangeValkeyExporterParams + 67, // 165: inventory.v1.ChangeAgentRequest.rta_mongodb_agent:type_name -> inventory.v1.ChangeRTAMongoDBAgentParams + 5, // 166: inventory.v1.ChangeAgentResponse.node_exporter:type_name -> inventory.v1.NodeExporter + 6, // 167: inventory.v1.ChangeAgentResponse.mysqld_exporter:type_name -> inventory.v1.MySQLdExporter + 7, // 168: inventory.v1.ChangeAgentResponse.mongodb_exporter:type_name -> inventory.v1.MongoDBExporter + 8, // 169: inventory.v1.ChangeAgentResponse.postgres_exporter:type_name -> inventory.v1.PostgresExporter + 9, // 170: inventory.v1.ChangeAgentResponse.proxysql_exporter:type_name -> inventory.v1.ProxySQLExporter + 21, // 171: inventory.v1.ChangeAgentResponse.external_exporter:type_name -> inventory.v1.ExternalExporter + 20, // 172: inventory.v1.ChangeAgentResponse.rds_exporter:type_name -> inventory.v1.RDSExporter + 22, // 173: inventory.v1.ChangeAgentResponse.azure_database_exporter:type_name -> inventory.v1.AzureDatabaseExporter + 11, // 174: inventory.v1.ChangeAgentResponse.qan_mysql_perfschema_agent:type_name -> inventory.v1.QANMySQLPerfSchemaAgent + 12, // 175: inventory.v1.ChangeAgentResponse.qan_mysql_slowlog_agent:type_name -> inventory.v1.QANMySQLSlowlogAgent + 14, // 176: inventory.v1.ChangeAgentResponse.qan_mongodb_profiler_agent:type_name -> inventory.v1.QANMongoDBProfilerAgent + 15, // 177: inventory.v1.ChangeAgentResponse.qan_mongodb_mongolog_agent:type_name -> inventory.v1.QANMongoDBMongologAgent + 18, // 178: inventory.v1.ChangeAgentResponse.qan_postgresql_pgstatements_agent:type_name -> inventory.v1.QANPostgreSQLPgStatementsAgent + 19, // 179: inventory.v1.ChangeAgentResponse.qan_postgresql_pgstatmonitor_agent:type_name -> inventory.v1.QANPostgreSQLPgStatMonitorAgent + 4, // 180: inventory.v1.ChangeAgentResponse.nomad_agent:type_name -> inventory.v1.NomadAgent + 10, // 181: inventory.v1.ChangeAgentResponse.valkey_exporter:type_name -> inventory.v1.ValkeyExporter + 17, // 182: inventory.v1.ChangeAgentResponse.rta_mongodb_agent:type_name -> inventory.v1.RTAMongoDBAgent + 91, // 183: inventory.v1.AddPMMAgentParams.custom_labels:type_name -> inventory.v1.AddPMMAgentParams.CustomLabelsEntry + 92, // 184: inventory.v1.AddNodeExporterParams.custom_labels:type_name -> inventory.v1.AddNodeExporterParams.CustomLabelsEntry + 112, // 185: inventory.v1.AddNodeExporterParams.log_level:type_name -> inventory.v1.LogLevel + 115, // 186: inventory.v1.ChangeNodeExporterParams.custom_labels:type_name -> common.StringMap + 113, // 187: inventory.v1.ChangeNodeExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 188: inventory.v1.ChangeNodeExporterParams.log_level:type_name -> inventory.v1.LogLevel + 93, // 189: inventory.v1.AddMySQLdExporterParams.custom_labels:type_name -> inventory.v1.AddMySQLdExporterParams.CustomLabelsEntry + 112, // 190: inventory.v1.AddMySQLdExporterParams.log_level:type_name -> inventory.v1.LogLevel + 94, // 191: inventory.v1.AddMySQLdExporterParams.extra_dsn_params:type_name -> inventory.v1.AddMySQLdExporterParams.ExtraDsnParamsEntry + 114, // 192: inventory.v1.AddMySQLdExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 115, // 193: inventory.v1.ChangeMySQLdExporterParams.custom_labels:type_name -> common.StringMap + 113, // 194: inventory.v1.ChangeMySQLdExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 195: inventory.v1.ChangeMySQLdExporterParams.log_level:type_name -> inventory.v1.LogLevel + 114, // 196: inventory.v1.ChangeMySQLdExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 95, // 197: inventory.v1.AddMongoDBExporterParams.custom_labels:type_name -> inventory.v1.AddMongoDBExporterParams.CustomLabelsEntry + 112, // 198: inventory.v1.AddMongoDBExporterParams.log_level:type_name -> inventory.v1.LogLevel + 114, // 199: inventory.v1.AddMongoDBExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 115, // 200: inventory.v1.ChangeMongoDBExporterParams.custom_labels:type_name -> common.StringMap + 113, // 201: inventory.v1.ChangeMongoDBExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 202: inventory.v1.ChangeMongoDBExporterParams.log_level:type_name -> inventory.v1.LogLevel + 114, // 203: inventory.v1.ChangeMongoDBExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 96, // 204: inventory.v1.AddPostgresExporterParams.custom_labels:type_name -> inventory.v1.AddPostgresExporterParams.CustomLabelsEntry + 112, // 205: inventory.v1.AddPostgresExporterParams.log_level:type_name -> inventory.v1.LogLevel + 114, // 206: inventory.v1.AddPostgresExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 115, // 207: inventory.v1.ChangePostgresExporterParams.custom_labels:type_name -> common.StringMap + 113, // 208: inventory.v1.ChangePostgresExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 209: inventory.v1.ChangePostgresExporterParams.log_level:type_name -> inventory.v1.LogLevel + 114, // 210: inventory.v1.ChangePostgresExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 97, // 211: inventory.v1.AddProxySQLExporterParams.custom_labels:type_name -> inventory.v1.AddProxySQLExporterParams.CustomLabelsEntry + 112, // 212: inventory.v1.AddProxySQLExporterParams.log_level:type_name -> inventory.v1.LogLevel + 114, // 213: inventory.v1.AddProxySQLExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 115, // 214: inventory.v1.ChangeProxySQLExporterParams.custom_labels:type_name -> common.StringMap + 113, // 215: inventory.v1.ChangeProxySQLExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 216: inventory.v1.ChangeProxySQLExporterParams.log_level:type_name -> inventory.v1.LogLevel + 114, // 217: inventory.v1.ChangeProxySQLExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 98, // 218: inventory.v1.AddQANMySQLPerfSchemaAgentParams.custom_labels:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams.CustomLabelsEntry + 112, // 219: inventory.v1.AddQANMySQLPerfSchemaAgentParams.log_level:type_name -> inventory.v1.LogLevel + 99, // 220: inventory.v1.AddQANMySQLPerfSchemaAgentParams.extra_dsn_params:type_name -> inventory.v1.AddQANMySQLPerfSchemaAgentParams.ExtraDsnParamsEntry + 115, // 221: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.custom_labels:type_name -> common.StringMap + 113, // 222: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 223: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams.log_level:type_name -> inventory.v1.LogLevel + 100, // 224: inventory.v1.AddQANMySQLSlowlogAgentParams.custom_labels:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams.CustomLabelsEntry + 112, // 225: inventory.v1.AddQANMySQLSlowlogAgentParams.log_level:type_name -> inventory.v1.LogLevel + 101, // 226: inventory.v1.AddQANMySQLSlowlogAgentParams.extra_dsn_params:type_name -> inventory.v1.AddQANMySQLSlowlogAgentParams.ExtraDsnParamsEntry + 115, // 227: inventory.v1.ChangeQANMySQLSlowlogAgentParams.custom_labels:type_name -> common.StringMap + 113, // 228: inventory.v1.ChangeQANMySQLSlowlogAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 229: inventory.v1.ChangeQANMySQLSlowlogAgentParams.log_level:type_name -> inventory.v1.LogLevel + 102, // 230: inventory.v1.AddQANMongoDBProfilerAgentParams.custom_labels:type_name -> inventory.v1.AddQANMongoDBProfilerAgentParams.CustomLabelsEntry + 112, // 231: inventory.v1.AddQANMongoDBProfilerAgentParams.log_level:type_name -> inventory.v1.LogLevel + 115, // 232: inventory.v1.ChangeQANMongoDBProfilerAgentParams.custom_labels:type_name -> common.StringMap + 113, // 233: inventory.v1.ChangeQANMongoDBProfilerAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 234: inventory.v1.ChangeQANMongoDBProfilerAgentParams.log_level:type_name -> inventory.v1.LogLevel + 103, // 235: inventory.v1.AddQANMongoDBMongologAgentParams.custom_labels:type_name -> inventory.v1.AddQANMongoDBMongologAgentParams.CustomLabelsEntry + 112, // 236: inventory.v1.AddQANMongoDBMongologAgentParams.log_level:type_name -> inventory.v1.LogLevel + 115, // 237: inventory.v1.ChangeQANMongoDBMongologAgentParams.custom_labels:type_name -> common.StringMap + 113, // 238: inventory.v1.ChangeQANMongoDBMongologAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 239: inventory.v1.ChangeQANMongoDBMongologAgentParams.log_level:type_name -> inventory.v1.LogLevel + 104, // 240: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.custom_labels:type_name -> inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.CustomLabelsEntry + 112, // 241: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.log_level:type_name -> inventory.v1.LogLevel + 115, // 242: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.custom_labels:type_name -> common.StringMap + 113, // 243: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 244: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams.log_level:type_name -> inventory.v1.LogLevel + 105, // 245: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.custom_labels:type_name -> inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.CustomLabelsEntry + 112, // 246: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.log_level:type_name -> inventory.v1.LogLevel + 115, // 247: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.custom_labels:type_name -> common.StringMap + 113, // 248: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 249: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams.log_level:type_name -> inventory.v1.LogLevel + 106, // 250: inventory.v1.AddRDSExporterParams.custom_labels:type_name -> inventory.v1.AddRDSExporterParams.CustomLabelsEntry + 112, // 251: inventory.v1.AddRDSExporterParams.log_level:type_name -> inventory.v1.LogLevel + 115, // 252: inventory.v1.ChangeRDSExporterParams.custom_labels:type_name -> common.StringMap + 113, // 253: inventory.v1.ChangeRDSExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 254: inventory.v1.ChangeRDSExporterParams.log_level:type_name -> inventory.v1.LogLevel + 107, // 255: inventory.v1.AddExternalExporterParams.custom_labels:type_name -> inventory.v1.AddExternalExporterParams.CustomLabelsEntry + 115, // 256: inventory.v1.ChangeExternalExporterParams.custom_labels:type_name -> common.StringMap + 113, // 257: inventory.v1.ChangeExternalExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 108, // 258: inventory.v1.AddAzureDatabaseExporterParams.custom_labels:type_name -> inventory.v1.AddAzureDatabaseExporterParams.CustomLabelsEntry + 112, // 259: inventory.v1.AddAzureDatabaseExporterParams.log_level:type_name -> inventory.v1.LogLevel + 115, // 260: inventory.v1.ChangeAzureDatabaseExporterParams.custom_labels:type_name -> common.StringMap + 113, // 261: inventory.v1.ChangeAzureDatabaseExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 262: inventory.v1.ChangeAzureDatabaseExporterParams.log_level:type_name -> inventory.v1.LogLevel + 109, // 263: inventory.v1.AddValkeyExporterParams.custom_labels:type_name -> inventory.v1.AddValkeyExporterParams.CustomLabelsEntry + 112, // 264: inventory.v1.AddValkeyExporterParams.log_level:type_name -> inventory.v1.LogLevel + 114, // 265: inventory.v1.AddValkeyExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 115, // 266: inventory.v1.ChangeValkeyExporterParams.custom_labels:type_name -> common.StringMap + 113, // 267: inventory.v1.ChangeValkeyExporterParams.metrics_resolutions:type_name -> common.MetricsResolutions + 112, // 268: inventory.v1.ChangeValkeyExporterParams.log_level:type_name -> inventory.v1.LogLevel + 114, // 269: inventory.v1.ChangeValkeyExporterParams.connection_timeout:type_name -> google.protobuf.Duration + 110, // 270: inventory.v1.AddRTAMongoDBAgentParams.custom_labels:type_name -> inventory.v1.AddRTAMongoDBAgentParams.CustomLabelsEntry + 112, // 271: inventory.v1.AddRTAMongoDBAgentParams.log_level:type_name -> inventory.v1.LogLevel + 16, // 272: inventory.v1.AddRTAMongoDBAgentParams.rta_options:type_name -> inventory.v1.RTAOptions + 115, // 273: inventory.v1.ChangeRTAMongoDBAgentParams.custom_labels:type_name -> common.StringMap + 112, // 274: inventory.v1.ChangeRTAMongoDBAgentParams.log_level:type_name -> inventory.v1.LogLevel + 16, // 275: inventory.v1.ChangeRTAMongoDBAgentParams.rta_options:type_name -> inventory.v1.RTAOptions + 24, // 276: inventory.v1.AgentsService.ListAgents:input_type -> inventory.v1.ListAgentsRequest + 26, // 277: inventory.v1.AgentsService.GetAgent:input_type -> inventory.v1.GetAgentRequest + 28, // 278: inventory.v1.AgentsService.GetAgentLogs:input_type -> inventory.v1.GetAgentLogsRequest + 30, // 279: inventory.v1.AgentsService.AddAgent:input_type -> inventory.v1.AddAgentRequest + 32, // 280: inventory.v1.AgentsService.ChangeAgent:input_type -> inventory.v1.ChangeAgentRequest + 68, // 281: inventory.v1.AgentsService.RemoveAgent:input_type -> inventory.v1.RemoveAgentRequest + 25, // 282: inventory.v1.AgentsService.ListAgents:output_type -> inventory.v1.ListAgentsResponse + 27, // 283: inventory.v1.AgentsService.GetAgent:output_type -> inventory.v1.GetAgentResponse + 29, // 284: inventory.v1.AgentsService.GetAgentLogs:output_type -> inventory.v1.GetAgentLogsResponse + 31, // 285: inventory.v1.AgentsService.AddAgent:output_type -> inventory.v1.AddAgentResponse + 33, // 286: inventory.v1.AgentsService.ChangeAgent:output_type -> inventory.v1.ChangeAgentResponse + 69, // 287: inventory.v1.AgentsService.RemoveAgent:output_type -> inventory.v1.RemoveAgentResponse + 282, // [282:288] is the sub-list for method output_type + 276, // [276:282] is the sub-list for method input_type + 276, // [276:276] is the sub-list for extension type_name + 276, // [276:276] is the sub-list for extension extendee + 0, // [0:276] is the sub-list for field type_name } func init() { file_inventory_v1_agents_proto_init() } @@ -12811,8 +13046,8 @@ func file_inventory_v1_agents_proto_init() { } file_inventory_v1_agent_status_proto_init() file_inventory_v1_log_level_proto_init() - file_inventory_v1_agents_proto_msgTypes[20].OneofWrappers = []any{} - file_inventory_v1_agents_proto_msgTypes[24].OneofWrappers = []any{ + file_inventory_v1_agents_proto_msgTypes[22].OneofWrappers = []any{} + file_inventory_v1_agents_proto_msgTypes[26].OneofWrappers = []any{ (*GetAgentResponse_PmmAgent)(nil), (*GetAgentResponse_Vmagent)(nil), (*GetAgentResponse_NodeExporter)(nil), @@ -12832,8 +13067,9 @@ func file_inventory_v1_agents_proto_init() { (*GetAgentResponse_NomadAgent)(nil), (*GetAgentResponse_ValkeyExporter)(nil), (*GetAgentResponse_RtaMongodbAgent)(nil), + (*GetAgentResponse_DbLogWatcherAgent)(nil), } - file_inventory_v1_agents_proto_msgTypes[27].OneofWrappers = []any{ + file_inventory_v1_agents_proto_msgTypes[29].OneofWrappers = []any{ (*AddAgentRequest_PmmAgent)(nil), (*AddAgentRequest_NodeExporter)(nil), (*AddAgentRequest_MysqldExporter)(nil), @@ -12852,7 +13088,7 @@ func file_inventory_v1_agents_proto_init() { (*AddAgentRequest_ValkeyExporter)(nil), (*AddAgentRequest_RtaMongodbAgent)(nil), } - file_inventory_v1_agents_proto_msgTypes[28].OneofWrappers = []any{ + file_inventory_v1_agents_proto_msgTypes[30].OneofWrappers = []any{ (*AddAgentResponse_PmmAgent)(nil), (*AddAgentResponse_NodeExporter)(nil), (*AddAgentResponse_MysqldExporter)(nil), @@ -12871,7 +13107,7 @@ func file_inventory_v1_agents_proto_init() { (*AddAgentResponse_ValkeyExporter)(nil), (*AddAgentResponse_RtaMongodbAgent)(nil), } - file_inventory_v1_agents_proto_msgTypes[29].OneofWrappers = []any{ + file_inventory_v1_agents_proto_msgTypes[31].OneofWrappers = []any{ (*ChangeAgentRequest_NodeExporter)(nil), (*ChangeAgentRequest_MysqldExporter)(nil), (*ChangeAgentRequest_MongodbExporter)(nil), @@ -12890,7 +13126,7 @@ func file_inventory_v1_agents_proto_init() { (*ChangeAgentRequest_ValkeyExporter)(nil), (*ChangeAgentRequest_RtaMongodbAgent)(nil), } - file_inventory_v1_agents_proto_msgTypes[30].OneofWrappers = []any{ + file_inventory_v1_agents_proto_msgTypes[32].OneofWrappers = []any{ (*ChangeAgentResponse_NodeExporter)(nil), (*ChangeAgentResponse_MysqldExporter)(nil), (*ChangeAgentResponse_MongodbExporter)(nil), @@ -12909,7 +13145,6 @@ func file_inventory_v1_agents_proto_init() { (*ChangeAgentResponse_ValkeyExporter)(nil), (*ChangeAgentResponse_RtaMongodbAgent)(nil), } - file_inventory_v1_agents_proto_msgTypes[33].OneofWrappers = []any{} file_inventory_v1_agents_proto_msgTypes[35].OneofWrappers = []any{} file_inventory_v1_agents_proto_msgTypes[37].OneofWrappers = []any{} file_inventory_v1_agents_proto_msgTypes[39].OneofWrappers = []any{} @@ -12923,16 +13158,17 @@ func file_inventory_v1_agents_proto_init() { file_inventory_v1_agents_proto_msgTypes[55].OneofWrappers = []any{} file_inventory_v1_agents_proto_msgTypes[57].OneofWrappers = []any{} file_inventory_v1_agents_proto_msgTypes[59].OneofWrappers = []any{} - file_inventory_v1_agents_proto_msgTypes[60].OneofWrappers = []any{} + file_inventory_v1_agents_proto_msgTypes[61].OneofWrappers = []any{} file_inventory_v1_agents_proto_msgTypes[62].OneofWrappers = []any{} file_inventory_v1_agents_proto_msgTypes[64].OneofWrappers = []any{} + file_inventory_v1_agents_proto_msgTypes[66].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_inventory_v1_agents_proto_rawDesc), len(file_inventory_v1_agents_proto_rawDesc)), NumEnums: 1, - NumMessages: 107, + NumMessages: 110, NumExtensions: 0, NumServices: 1, }, diff --git a/api/inventory/v1/agents.pb.validate.go b/api/inventory/v1/agents.pb.validate.go index 0c310df49e6..5833cc42500 100644 --- a/api/inventory/v1/agents.pb.validate.go +++ b/api/inventory/v1/agents.pb.validate.go @@ -38,6 +38,109 @@ var ( // define the regex for a UUID once up-front var _agents_uuidPattern = regexp.MustCompile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") +// Validate checks the field values on WatchedLog with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *WatchedLog) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on WatchedLog with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in WatchedLogMultiError, or +// nil if none found. +func (m *WatchedLog) ValidateAll() error { + return m.validate(true) +} + +func (m *WatchedLog) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for Path + + // no validation rules for Type + + if len(errors) > 0 { + return WatchedLogMultiError(errors) + } + + return nil +} + +// WatchedLogMultiError is an error wrapping multiple validation errors +// returned by WatchedLog.ValidateAll() if the designated constraints aren't met. +type WatchedLogMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m WatchedLogMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m WatchedLogMultiError) AllErrors() []error { return m } + +// WatchedLogValidationError is the validation error returned by +// WatchedLog.Validate if the designated constraints aren't met. +type WatchedLogValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e WatchedLogValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e WatchedLogValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e WatchedLogValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e WatchedLogValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e WatchedLogValidationError) ErrorName() string { return "WatchedLogValidationError" } + +// Error satisfies the builtin error interface +func (e WatchedLogValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sWatchedLog.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = WatchedLogValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = WatchedLogValidationError{} + // Validate checks the field values on PMMAgent with the rules defined in the // proto definition for this message. If any rules are violated, the first // error encountered is returned, or nil if there are no violations. @@ -134,8 +237,7 @@ func (e PMMAgentValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = PMMAgentValidationError{} @@ -243,8 +345,7 @@ func (e VMAgentValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = VMAgentValidationError{} @@ -355,8 +456,7 @@ func (e NomadAgentValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = NomadAgentValidationError{} @@ -504,8 +604,7 @@ func (e NodeExporterValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = NodeExporterValidationError{} @@ -705,8 +804,7 @@ func (e MySQLdExporterValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = MySQLdExporterValidationError{} @@ -896,8 +994,7 @@ func (e MongoDBExporterValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = MongoDBExporterValidationError{} @@ -1087,8 +1184,7 @@ func (e PostgresExporterValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = PostgresExporterValidationError{} @@ -1274,8 +1370,7 @@ func (e ProxySQLExporterValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ProxySQLExporterValidationError{} @@ -1459,8 +1554,7 @@ func (e ValkeyExporterValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ValkeyExporterValidationError{} @@ -1598,8 +1692,7 @@ func (e QANMySQLPerfSchemaAgentValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = QANMySQLPerfSchemaAgentValidationError{} @@ -1739,8 +1832,7 @@ func (e QANMySQLSlowlogAgentValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = QANMySQLSlowlogAgentValidationError{} @@ -1753,6 +1845,160 @@ var _ interface { ErrorName() string } = QANMySQLSlowlogAgentValidationError{} +// Validate checks the field values on DBLogWatcherAgent with the rules defined +// in the proto definition for this message. If any rules are violated, the +// first error encountered is returned, or nil if there are no violations. +func (m *DBLogWatcherAgent) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on DBLogWatcherAgent with the rules +// defined in the proto definition for this message. If any rules are +// violated, the result is a list of violation errors wrapped in +// DBLogWatcherAgentMultiError, or nil if none found. +func (m *DBLogWatcherAgent) ValidateAll() error { + return m.validate(true) +} + +func (m *DBLogWatcherAgent) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for AgentId + + // no validation rules for PmmAgentId + + // no validation rules for Disabled + + // no validation rules for ServiceId + + // no validation rules for DbSystem + + for idx, item := range m.GetWatchedLogs() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, DBLogWatcherAgentValidationError{ + field: fmt.Sprintf("WatchedLogs[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, DBLogWatcherAgentValidationError{ + field: fmt.Sprintf("WatchedLogs[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return DBLogWatcherAgentValidationError{ + field: fmt.Sprintf("WatchedLogs[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for CustomLabels + + // no validation rules for Status + + // no validation rules for ProcessExecPath + + // no validation rules for LogLevel + + if len(errors) > 0 { + return DBLogWatcherAgentMultiError(errors) + } + + return nil +} + +// DBLogWatcherAgentMultiError is an error wrapping multiple validation errors +// returned by DBLogWatcherAgent.ValidateAll() if the designated constraints +// aren't met. +type DBLogWatcherAgentMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m DBLogWatcherAgentMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m DBLogWatcherAgentMultiError) AllErrors() []error { return m } + +// DBLogWatcherAgentValidationError is the validation error returned by +// DBLogWatcherAgent.Validate if the designated constraints aren't met. +type DBLogWatcherAgentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e DBLogWatcherAgentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e DBLogWatcherAgentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e DBLogWatcherAgentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e DBLogWatcherAgentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e DBLogWatcherAgentValidationError) ErrorName() string { + return "DBLogWatcherAgentValidationError" +} + +// Error satisfies the builtin error interface +func (e DBLogWatcherAgentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sDBLogWatcherAgent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = DBLogWatcherAgentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = DBLogWatcherAgentValidationError{} + // Validate checks the field values on QANMongoDBProfilerAgent with the rules // defined in the proto definition for this message. If any rules are // violated, the first error encountered is returned, or nil if there are no violations. @@ -1866,8 +2112,7 @@ func (e QANMongoDBProfilerAgentValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = QANMongoDBProfilerAgentValidationError{} @@ -1993,8 +2238,7 @@ func (e QANMongoDBMongologAgentValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = QANMongoDBMongologAgentValidationError{} @@ -2123,8 +2367,7 @@ func (e RTAOptionsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = RTAOptionsValidationError{} @@ -2273,8 +2516,7 @@ func (e RTAMongoDBAgentValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = RTAMongoDBAgentValidationError{} @@ -2403,8 +2645,7 @@ func (e QANPostgreSQLPgStatementsAgentValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = QANPostgreSQLPgStatementsAgentValidationError{} @@ -2535,8 +2776,7 @@ func (e QANPostgreSQLPgStatMonitorAgentValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = QANPostgreSQLPgStatMonitorAgentValidationError{} @@ -2692,8 +2932,7 @@ func (e RDSExporterValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = RDSExporterValidationError{} @@ -2848,8 +3087,7 @@ func (e ExternalExporterValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ExternalExporterValidationError{} @@ -3004,8 +3242,7 @@ func (e AzureDatabaseExporterValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AzureDatabaseExporterValidationError{} @@ -3074,6 +3311,7 @@ func (m *ChangeCommonAgentParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -3102,6 +3340,7 @@ func (m *ChangeCommonAgentParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -3175,8 +3414,7 @@ func (e ChangeCommonAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeCommonAgentParamsValidationError{} @@ -3286,8 +3524,7 @@ func (e ListAgentsRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ListAgentsRequestValidationError{} @@ -3968,6 +4205,40 @@ func (m *ListAgentsResponse) validate(all bool) error { } + for idx, item := range m.GetDbLogWatcherAgent() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ListAgentsResponseValidationError{ + field: fmt.Sprintf("DbLogWatcherAgent[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ListAgentsResponseValidationError{ + field: fmt.Sprintf("DbLogWatcherAgent[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ListAgentsResponseValidationError{ + field: fmt.Sprintf("DbLogWatcherAgent[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + if len(errors) > 0 { return ListAgentsResponseMultiError(errors) } @@ -4035,8 +4306,7 @@ func (e ListAgentsResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ListAgentsResponseValidationError{} @@ -4147,8 +4417,7 @@ func (e GetAgentRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetAgentRequestValidationError{} @@ -4963,6 +5232,47 @@ func (m *GetAgentResponse) validate(all bool) error { } } + case *GetAgentResponse_DbLogWatcherAgent: + if v == nil { + err := GetAgentResponseValidationError{ + field: "Agent", + reason: "oneof value cannot be a typed-nil", + } + if !all { + return err + } + errors = append(errors, err) + } + + if all { + switch v := interface{}(m.GetDbLogWatcherAgent()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, GetAgentResponseValidationError{ + field: "DbLogWatcherAgent", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, GetAgentResponseValidationError{ + field: "DbLogWatcherAgent", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetDbLogWatcherAgent()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetAgentResponseValidationError{ + field: "DbLogWatcherAgent", + reason: "embedded message failed validation", + cause: err, + } + } + } + default: _ = v // ensures v is used } @@ -5032,8 +5342,7 @@ func (e GetAgentResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetAgentResponseValidationError{} @@ -5148,8 +5457,7 @@ func (e GetAgentLogsRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetAgentLogsRequestValidationError{} @@ -5253,8 +5561,7 @@ func (e GetAgentLogsResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetAgentLogsResponseValidationError{} @@ -6056,8 +6363,7 @@ func (e AddAgentRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddAgentRequestValidationError{} @@ -6859,8 +7165,7 @@ func (e AddAgentResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddAgentResponseValidationError{} @@ -7675,8 +7980,7 @@ func (e ChangeAgentRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeAgentRequestValidationError{} @@ -8480,8 +8784,7 @@ func (e ChangeAgentResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeAgentResponseValidationError{} @@ -8596,8 +8899,7 @@ func (e AddPMMAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddPMMAgentParamsValidationError{} @@ -8718,8 +9020,7 @@ func (e AddNodeExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddNodeExporterParamsValidationError{} @@ -8788,6 +9089,7 @@ func (m *ChangeNodeExporterParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -8816,6 +9118,7 @@ func (m *ChangeNodeExporterParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -8897,8 +9200,7 @@ func (e ChangeNodeExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeNodeExporterParamsValidationError{} @@ -9091,8 +9393,7 @@ func (e AddMySQLdExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddMySQLdExporterParamsValidationError{} @@ -9191,6 +9492,7 @@ func (m *ChangeMySQLdExporterParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -9219,6 +9521,7 @@ func (m *ChangeMySQLdExporterParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -9340,8 +9643,7 @@ func (e ChangeMySQLdExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeMySQLdExporterParamsValidationError{} @@ -9529,8 +9831,7 @@ func (e AddMongoDBExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddMongoDBExporterParamsValidationError{} @@ -9629,6 +9930,7 @@ func (m *ChangeMongoDBExporterParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -9657,6 +9959,7 @@ func (m *ChangeMongoDBExporterParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -9791,8 +10094,7 @@ func (e ChangeMongoDBExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeMongoDBExporterParamsValidationError{} @@ -9985,8 +10287,7 @@ func (e AddPostgresExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddPostgresExporterParamsValidationError{} @@ -10085,6 +10386,7 @@ func (m *ChangePostgresExporterParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -10113,6 +10415,7 @@ func (m *ChangePostgresExporterParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -10239,8 +10542,7 @@ func (e ChangePostgresExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangePostgresExporterParamsValidationError{} @@ -10423,8 +10725,7 @@ func (e AddProxySQLExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddProxySQLExporterParamsValidationError{} @@ -10523,6 +10824,7 @@ func (m *ChangeProxySQLExporterParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -10551,6 +10853,7 @@ func (m *ChangeProxySQLExporterParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -10653,8 +10956,7 @@ func (e ChangeProxySQLExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeProxySQLExporterParamsValidationError{} @@ -10818,8 +11120,7 @@ func (e AddQANMySQLPerfSchemaAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddQANMySQLPerfSchemaAgentParamsValidationError{} @@ -10889,6 +11190,7 @@ func (m *ChangeQANMySQLPerfSchemaAgentParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -10917,6 +11219,7 @@ func (m *ChangeQANMySQLPerfSchemaAgentParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -11040,8 +11343,7 @@ func (e ChangeQANMySQLPerfSchemaAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeQANMySQLPerfSchemaAgentParamsValidationError{} @@ -11205,8 +11507,7 @@ func (e AddQANMySQLSlowlogAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddQANMySQLSlowlogAgentParamsValidationError{} @@ -11276,6 +11577,7 @@ func (m *ChangeQANMySQLSlowlogAgentParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -11304,6 +11606,7 @@ func (m *ChangeQANMySQLSlowlogAgentParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -11431,8 +11734,7 @@ func (e ChangeQANMySQLSlowlogAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeQANMySQLSlowlogAgentParamsValidationError{} @@ -11585,8 +11887,7 @@ func (e AddQANMongoDBProfilerAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddQANMongoDBProfilerAgentParamsValidationError{} @@ -11656,6 +11957,7 @@ func (m *ChangeQANMongoDBProfilerAgentParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -11684,6 +11986,7 @@ func (m *ChangeQANMongoDBProfilerAgentParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -11803,8 +12106,7 @@ func (e ChangeQANMongoDBProfilerAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeQANMongoDBProfilerAgentParamsValidationError{} @@ -11957,8 +12259,7 @@ func (e AddQANMongoDBMongologAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddQANMongoDBMongologAgentParamsValidationError{} @@ -12028,6 +12329,7 @@ func (m *ChangeQANMongoDBMongologAgentParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -12056,6 +12358,7 @@ func (m *ChangeQANMongoDBMongologAgentParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -12175,8 +12478,7 @@ func (e ChangeQANMongoDBMongologAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeQANMongoDBMongologAgentParamsValidationError{} @@ -12337,8 +12639,7 @@ func (e AddQANPostgreSQLPgStatementsAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddQANPostgreSQLPgStatementsAgentParamsValidationError{} @@ -12409,6 +12710,7 @@ func (m *ChangeQANPostgreSQLPgStatementsAgentParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -12437,6 +12739,7 @@ func (m *ChangeQANPostgreSQLPgStatementsAgentParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -12552,8 +12855,7 @@ func (e ChangeQANPostgreSQLPgStatementsAgentParamsValidationError) Error() strin key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeQANPostgreSQLPgStatementsAgentParamsValidationError{} @@ -12716,8 +13018,7 @@ func (e AddQANPostgreSQLPgStatMonitorAgentParamsValidationError) Error() string key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddQANPostgreSQLPgStatMonitorAgentParamsValidationError{} @@ -12788,6 +13089,7 @@ func (m *ChangeQANPostgreSQLPgStatMonitorAgentParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -12816,6 +13118,7 @@ func (m *ChangeQANPostgreSQLPgStatMonitorAgentParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -12935,8 +13238,7 @@ func (e ChangeQANPostgreSQLPgStatMonitorAgentParamsValidationError) Error() stri key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeQANPostgreSQLPgStatMonitorAgentParamsValidationError{} @@ -13076,8 +13378,7 @@ func (e AddRDSExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddRDSExporterParamsValidationError{} @@ -13146,6 +13447,7 @@ func (m *ChangeRDSExporterParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -13174,6 +13476,7 @@ func (m *ChangeRDSExporterParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -13267,8 +13570,7 @@ func (e ChangeRDSExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeRDSExporterParamsValidationError{} @@ -13408,8 +13710,7 @@ func (e AddExternalExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddExternalExporterParamsValidationError{} @@ -13478,6 +13779,7 @@ func (m *ChangeExternalExporterParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -13506,6 +13808,7 @@ func (m *ChangeExternalExporterParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -13596,8 +13899,7 @@ func (e ChangeExternalExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeExternalExporterParamsValidationError{} @@ -13751,8 +14053,7 @@ func (e AddAzureDatabaseExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddAzureDatabaseExporterParamsValidationError{} @@ -13822,6 +14123,7 @@ func (m *ChangeAzureDatabaseExporterParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -13850,6 +14152,7 @@ func (m *ChangeAzureDatabaseExporterParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -13949,8 +14252,7 @@ func (e ChangeAzureDatabaseExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeAzureDatabaseExporterParamsValidationError{} @@ -14056,8 +14358,7 @@ func (e ChangeNomadAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeNomadAgentParamsValidationError{} @@ -14255,8 +14556,7 @@ func (e AddValkeyExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddValkeyExporterParamsValidationError{} @@ -14355,6 +14655,7 @@ func (m *ChangeValkeyExporterParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -14383,6 +14684,7 @@ func (m *ChangeValkeyExporterParams) validate(all bool) error { } } } + } if m.EnablePushMetrics != nil { @@ -14390,6 +14692,7 @@ func (m *ChangeValkeyExporterParams) validate(all bool) error { } if m.Username != nil { + if utf8.RuneCountInString(m.GetUsername()) < 1 { err := ChangeValkeyExporterParamsValidationError{ field: "Username", @@ -14400,6 +14703,7 @@ func (m *ChangeValkeyExporterParams) validate(all bool) error { } errors = append(errors, err) } + } if m.Password != nil { @@ -14505,8 +14809,7 @@ func (e ChangeValkeyExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeValkeyExporterParamsValidationError{} @@ -14681,8 +14984,7 @@ func (e AddRTAMongoDBAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddRTAMongoDBAgentParamsValidationError{} @@ -14722,6 +15024,7 @@ func (m *ChangeRTAMongoDBAgentParams) validate(all bool) error { } if m.CustomLabels != nil { + if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -14750,6 +15053,7 @@ func (m *ChangeRTAMongoDBAgentParams) validate(all bool) error { } } } + } if m.LogLevel != nil { @@ -14789,6 +15093,7 @@ func (m *ChangeRTAMongoDBAgentParams) validate(all bool) error { } if m.RtaOptions != nil { + if all { switch v := interface{}(m.GetRtaOptions()).(type) { case interface{ ValidateAll() error }: @@ -14817,6 +15122,7 @@ func (m *ChangeRTAMongoDBAgentParams) validate(all bool) error { } } } + } if len(errors) > 0 { @@ -14887,8 +15193,7 @@ func (e ChangeRTAMongoDBAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeRTAMongoDBAgentParamsValidationError{} @@ -15003,8 +15308,7 @@ func (e RemoveAgentRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = RemoveAgentRequestValidationError{} @@ -15106,8 +15410,7 @@ func (e RemoveAgentResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = RemoveAgentResponseValidationError{} diff --git a/api/inventory/v1/agents.proto b/api/inventory/v1/agents.proto index fea2b5df13e..71093937ad0 100644 --- a/api/inventory/v1/agents.proto +++ b/api/inventory/v1/agents.proto @@ -34,6 +34,15 @@ enum AgentType { AGENT_TYPE_AZURE_DATABASE_EXPORTER = 15; AGENT_TYPE_NOMAD_AGENT = 16; AGENT_TYPE_RTA_MONGODB_AGENT = 19; + AGENT_TYPE_DB_LOG_WATCHER_AGENT = 20; +} + +// WatchedLog identifies a single database log file to watch and its type. +message WatchedLog { + // Absolute path of the log file on the client node. + string path = 1; + // Log type: error, slow or general. + string type = 2; } // PMMAgent runs on Generic or Container Node. @@ -468,6 +477,34 @@ message QANMySQLSlowlogAgent { map extra_dsn_params = 23; } +// DBLogWatcherAgent runs within pmm-agent and ships watched database log files to the PMM Server. +message DBLogWatcherAgent { + // Unique randomly generated instance identifier. + string agent_id = 1; + // The pmm-agent identifier which runs this instance. + string pmm_agent_id = 2; + // Desired Agent status: enabled (false) or disabled (true). + bool disabled = 3; + // Service identifier. + string service_id = 4; + // Database engine: mysql, postgresql, mongodb, valkey or redis. + string db_system = 5; + // Log files being watched and shipped. + repeated WatchedLog watched_logs = 6; + // Custom user-assigned labels. + map custom_labels = 7; + + // + // Status fields below. + // + + // Actual Agent status. + AgentStatus status = 20; + string process_exec_path = 21; + // Log level for the agent. + LogLevel log_level = 22; +} + // QANMongoDBProfilerAgent runs within pmm-agent and sends MongoDB Query Analytics data to the PMM Server. message QANMongoDBProfilerAgent { reserved 8; // TODO https://jira.percona.com/browse/PMM-4650 @@ -805,6 +842,7 @@ message ListAgentsResponse { repeated NomadAgent nomad_agent = 16; repeated ValkeyExporter valkey_exporter = 17; repeated RTAMongoDBAgent rta_mongodb_agent = 19; + repeated DBLogWatcherAgent db_log_watcher_agent = 20; } // Get @@ -835,6 +873,7 @@ message GetAgentResponse { NomadAgent nomad_agent = 16; ValkeyExporter valkey_exporter = 17; RTAMongoDBAgent rta_mongodb_agent = 19; + DBLogWatcherAgent db_log_watcher_agent = 20; } } diff --git a/api/logship/v1/logship.pb.go b/api/logship/v1/logship.pb.go new file mode 100644 index 00000000000..7b9ef5ff50e --- /dev/null +++ b/api/logship/v1/logship.pb.go @@ -0,0 +1,289 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc (unknown) +// source: logship/v1/logship.proto + +package logshipv1 + +import ( + _ "google.golang.org/genproto/googleapis/api/visibility" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" + unsafe "unsafe" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// LogRecord is a single OTLP-shaped log line shipped from a PMM Client. +type LogRecord struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Time the line was produced. + Time *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=time,proto3" json:"time,omitempty"` + // Optional severity text; usually left empty as parsing happens centrally on the server. + SeverityText string `protobuf:"bytes,2,opt,name=severity_text,json=severityText,proto3" json:"severity_text,omitempty"` + // Raw log line. + Body string `protobuf:"bytes,3,opt,name=body,proto3" json:"body,omitempty"` + // Per-record attributes (mapped to OTel LogAttributes). + Attributes map[string]string `protobuf:"bytes,4,rep,name=attributes,proto3" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LogRecord) Reset() { + *x = LogRecord{} + mi := &file_logship_v1_logship_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LogRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LogRecord) ProtoMessage() {} + +func (x *LogRecord) ProtoReflect() protoreflect.Message { + mi := &file_logship_v1_logship_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LogRecord.ProtoReflect.Descriptor instead. +func (*LogRecord) Descriptor() ([]byte, []int) { + return file_logship_v1_logship_proto_rawDescGZIP(), []int{0} +} + +func (x *LogRecord) GetTime() *timestamppb.Timestamp { + if x != nil { + return x.Time + } + return nil +} + +func (x *LogRecord) GetSeverityText() string { + if x != nil { + return x.SeverityText + } + return "" +} + +func (x *LogRecord) GetBody() string { + if x != nil { + return x.Body + } + return "" +} + +func (x *LogRecord) GetAttributes() map[string]string { + if x != nil { + return x.Attributes + } + return nil +} + +// ShipRequest carries a batch of log records from a single logical source (pmm-agent, an exporter, or +// a watched database) to pmm-managed. +type ShipRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Logical source name, mapped to OTel ServiceName. + ServiceName string `protobuf:"bytes,1,opt,name=service_name,json=serviceName,proto3" json:"service_name,omitempty"` + // Resource-level attributes shared by all records (mapped to OTel ResourceAttributes). + ResourceAttributes map[string]string `protobuf:"bytes,2,rep,name=resource_attributes,json=resourceAttributes,proto3" json:"resource_attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // The log records. + Records []*LogRecord `protobuf:"bytes,3,rep,name=records,proto3" json:"records,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ShipRequest) Reset() { + *x = ShipRequest{} + mi := &file_logship_v1_logship_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ShipRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ShipRequest) ProtoMessage() {} + +func (x *ShipRequest) ProtoReflect() protoreflect.Message { + mi := &file_logship_v1_logship_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ShipRequest.ProtoReflect.Descriptor instead. +func (*ShipRequest) Descriptor() ([]byte, []int) { + return file_logship_v1_logship_proto_rawDescGZIP(), []int{1} +} + +func (x *ShipRequest) GetServiceName() string { + if x != nil { + return x.ServiceName + } + return "" +} + +func (x *ShipRequest) GetResourceAttributes() map[string]string { + if x != nil { + return x.ResourceAttributes + } + return nil +} + +func (x *ShipRequest) GetRecords() []*LogRecord { + if x != nil { + return x.Records + } + return nil +} + +// ShipResponse is a stub for the server response. +type ShipResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ShipResponse) Reset() { + *x = ShipResponse{} + mi := &file_logship_v1_logship_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ShipResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ShipResponse) ProtoMessage() {} + +func (x *ShipResponse) ProtoReflect() protoreflect.Message { + mi := &file_logship_v1_logship_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ShipResponse.ProtoReflect.Descriptor instead. +func (*ShipResponse) Descriptor() ([]byte, []int) { + return file_logship_v1_logship_proto_rawDescGZIP(), []int{2} +} + +var File_logship_v1_logship_proto protoreflect.FileDescriptor + +const file_logship_v1_logship_proto_rawDesc = "" + + "\n" + + "\x18logship/v1/logship.proto\x12\n" + + "logship.v1\x1a\x1bgoogle/api/visibility.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xfa\x01\n" + + "\tLogRecord\x12.\n" + + "\x04time\x18\x01 \x01(\v2\x1a.google.protobuf.TimestampR\x04time\x12#\n" + + "\rseverity_text\x18\x02 \x01(\tR\fseverityText\x12\x12\n" + + "\x04body\x18\x03 \x01(\tR\x04body\x12E\n" + + "\n" + + "attributes\x18\x04 \x03(\v2%.logship.v1.LogRecord.AttributesEntryR\n" + + "attributes\x1a=\n" + + "\x0fAttributesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x8a\x02\n" + + "\vShipRequest\x12!\n" + + "\fservice_name\x18\x01 \x01(\tR\vserviceName\x12`\n" + + "\x13resource_attributes\x18\x02 \x03(\v2/.logship.v1.ShipRequest.ResourceAttributesEntryR\x12resourceAttributes\x12/\n" + + "\arecords\x18\x03 \x03(\v2\x15.logship.v1.LogRecordR\arecords\x1aE\n" + + "\x17ResourceAttributesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\x0e\n" + + "\fShipResponse2_\n" + + "\x0eLogShipService\x12;\n" + + "\x04Ship\x12\x17.logship.v1.ShipRequest\x1a\x18.logship.v1.ShipResponse(\x01\x1a\x10\xfa\xd2\xe4\x93\x02\n" + + "\x12\bINTERNALB\x98\x01\n" + + "\x0ecom.logship.v1B\fLogshipProtoP\x01Z/github.com/percona/pmm/api/logship/v1;logshipv1\xa2\x02\x03LXX\xaa\x02\n" + + "Logship.V1\xca\x02\n" + + "Logship\\V1\xe2\x02\x16Logship\\V1\\GPBMetadata\xea\x02\vLogship::V1b\x06proto3" + +var ( + file_logship_v1_logship_proto_rawDescOnce sync.Once + file_logship_v1_logship_proto_rawDescData []byte +) + +func file_logship_v1_logship_proto_rawDescGZIP() []byte { + file_logship_v1_logship_proto_rawDescOnce.Do(func() { + file_logship_v1_logship_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_logship_v1_logship_proto_rawDesc), len(file_logship_v1_logship_proto_rawDesc))) + }) + return file_logship_v1_logship_proto_rawDescData +} + +var file_logship_v1_logship_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_logship_v1_logship_proto_goTypes = []any{ + (*LogRecord)(nil), // 0: logship.v1.LogRecord + (*ShipRequest)(nil), // 1: logship.v1.ShipRequest + (*ShipResponse)(nil), // 2: logship.v1.ShipResponse + nil, // 3: logship.v1.LogRecord.AttributesEntry + nil, // 4: logship.v1.ShipRequest.ResourceAttributesEntry + (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp +} +var file_logship_v1_logship_proto_depIdxs = []int32{ + 5, // 0: logship.v1.LogRecord.time:type_name -> google.protobuf.Timestamp + 3, // 1: logship.v1.LogRecord.attributes:type_name -> logship.v1.LogRecord.AttributesEntry + 4, // 2: logship.v1.ShipRequest.resource_attributes:type_name -> logship.v1.ShipRequest.ResourceAttributesEntry + 0, // 3: logship.v1.ShipRequest.records:type_name -> logship.v1.LogRecord + 1, // 4: logship.v1.LogShipService.Ship:input_type -> logship.v1.ShipRequest + 2, // 5: logship.v1.LogShipService.Ship:output_type -> logship.v1.ShipResponse + 5, // [5:6] is the sub-list for method output_type + 4, // [4:5] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_logship_v1_logship_proto_init() } +func file_logship_v1_logship_proto_init() { + if File_logship_v1_logship_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_logship_v1_logship_proto_rawDesc), len(file_logship_v1_logship_proto_rawDesc)), + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_logship_v1_logship_proto_goTypes, + DependencyIndexes: file_logship_v1_logship_proto_depIdxs, + MessageInfos: file_logship_v1_logship_proto_msgTypes, + }.Build() + File_logship_v1_logship_proto = out.File + file_logship_v1_logship_proto_goTypes = nil + file_logship_v1_logship_proto_depIdxs = nil +} diff --git a/api/logship/v1/logship.pb.validate.go b/api/logship/v1/logship.pb.validate.go new file mode 100644 index 00000000000..fc8bed457c2 --- /dev/null +++ b/api/logship/v1/logship.pb.validate.go @@ -0,0 +1,406 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: logship/v1/logship.proto + +package logshipv1 + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "sort" + "strings" + "time" + "unicode/utf8" + + "google.golang.org/protobuf/types/known/anypb" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = anypb.Any{} + _ = sort.Sort +) + +// Validate checks the field values on LogRecord with the rules defined in the +// proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *LogRecord) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on LogRecord with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in LogRecordMultiError, or nil +// if none found. +func (m *LogRecord) ValidateAll() error { + return m.validate(true) +} + +func (m *LogRecord) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if all { + switch v := interface{}(m.GetTime()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, LogRecordValidationError{ + field: "Time", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, LogRecordValidationError{ + field: "Time", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetTime()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return LogRecordValidationError{ + field: "Time", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for SeverityText + + // no validation rules for Body + + // no validation rules for Attributes + + if len(errors) > 0 { + return LogRecordMultiError(errors) + } + + return nil +} + +// LogRecordMultiError is an error wrapping multiple validation errors returned +// by LogRecord.ValidateAll() if the designated constraints aren't met. +type LogRecordMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m LogRecordMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m LogRecordMultiError) AllErrors() []error { return m } + +// LogRecordValidationError is the validation error returned by +// LogRecord.Validate if the designated constraints aren't met. +type LogRecordValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e LogRecordValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e LogRecordValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e LogRecordValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e LogRecordValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e LogRecordValidationError) ErrorName() string { return "LogRecordValidationError" } + +// Error satisfies the builtin error interface +func (e LogRecordValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sLogRecord.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = LogRecordValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = LogRecordValidationError{} + +// Validate checks the field values on ShipRequest with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *ShipRequest) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShipRequest with the rules defined in +// the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ShipRequestMultiError, or +// nil if none found. +func (m *ShipRequest) ValidateAll() error { + return m.validate(true) +} + +func (m *ShipRequest) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + // no validation rules for ServiceName + + // no validation rules for ResourceAttributes + + for idx, item := range m.GetRecords() { + _, _ = idx, item + + if all { + switch v := interface{}(item).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ShipRequestValidationError{ + field: fmt.Sprintf("Records[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ShipRequestValidationError{ + field: fmt.Sprintf("Records[%v]", idx), + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ShipRequestValidationError{ + field: fmt.Sprintf("Records[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if len(errors) > 0 { + return ShipRequestMultiError(errors) + } + + return nil +} + +// ShipRequestMultiError is an error wrapping multiple validation errors +// returned by ShipRequest.ValidateAll() if the designated constraints aren't met. +type ShipRequestMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShipRequestMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ShipRequestMultiError) AllErrors() []error { return m } + +// ShipRequestValidationError is the validation error returned by +// ShipRequest.Validate if the designated constraints aren't met. +type ShipRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShipRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShipRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShipRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShipRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShipRequestValidationError) ErrorName() string { return "ShipRequestValidationError" } + +// Error satisfies the builtin error interface +func (e ShipRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sShipRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShipRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShipRequestValidationError{} + +// Validate checks the field values on ShipResponse with the rules defined in +// the proto definition for this message. If any rules are violated, the first +// error encountered is returned, or nil if there are no violations. +func (m *ShipResponse) Validate() error { + return m.validate(false) +} + +// ValidateAll checks the field values on ShipResponse with the rules defined +// in the proto definition for this message. If any rules are violated, the +// result is a list of violation errors wrapped in ShipResponseMultiError, or +// nil if none found. +func (m *ShipResponse) ValidateAll() error { + return m.validate(true) +} + +func (m *ShipResponse) validate(all bool) error { + if m == nil { + return nil + } + + var errors []error + + if len(errors) > 0 { + return ShipResponseMultiError(errors) + } + + return nil +} + +// ShipResponseMultiError is an error wrapping multiple validation errors +// returned by ShipResponse.ValidateAll() if the designated constraints aren't met. +type ShipResponseMultiError []error + +// Error returns a concatenation of all the error messages it wraps. +func (m ShipResponseMultiError) Error() string { + msgs := make([]string, 0, len(m)) + for _, err := range m { + msgs = append(msgs, err.Error()) + } + return strings.Join(msgs, "; ") +} + +// AllErrors returns a list of validation violation errors. +func (m ShipResponseMultiError) AllErrors() []error { return m } + +// ShipResponseValidationError is the validation error returned by +// ShipResponse.Validate if the designated constraints aren't met. +type ShipResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ShipResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ShipResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ShipResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ShipResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ShipResponseValidationError) ErrorName() string { return "ShipResponseValidationError" } + +// Error satisfies the builtin error interface +func (e ShipResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sShipResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ShipResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ShipResponseValidationError{} diff --git a/api/logship/v1/logship.proto b/api/logship/v1/logship.proto new file mode 100644 index 00000000000..aeb1e7eaad4 --- /dev/null +++ b/api/logship/v1/logship.proto @@ -0,0 +1,41 @@ +syntax = "proto3"; + +package logship.v1; + +import "google/api/visibility.proto"; +import "google/protobuf/timestamp.proto"; + +option go_package = "github.com/percona/pmm/api/logship/v1;logshipv1"; + +// LogRecord is a single OTLP-shaped log line shipped from a PMM Client. +message LogRecord { + // Time the line was produced. + google.protobuf.Timestamp time = 1; + // Optional severity text; usually left empty as parsing happens centrally on the server. + string severity_text = 2; + // Raw log line. + string body = 3; + // Per-record attributes (mapped to OTel LogAttributes). + map attributes = 4; +} + +// ShipRequest carries a batch of log records from a single logical source (pmm-agent, an exporter, or +// a watched database) to pmm-managed. +message ShipRequest { + // Logical source name, mapped to OTel ServiceName. + string service_name = 1; + // Resource-level attributes shared by all records (mapped to OTel ResourceAttributes). + map resource_attributes = 2; + // The log records. + repeated LogRecord records = 3; +} + +// ShipResponse is a stub for the server response. +message ShipResponse {} + +// LogShipService receives client and database logs from PMM Clients over the existing agent channel. +service LogShipService { + option (google.api.api_visibility).restriction = "INTERNAL"; + // Ship is a uni-directional stream of client/database log records from pmm-agent to pmm-managed. + rpc Ship(stream ShipRequest) returns (ShipResponse); +} diff --git a/api/logship/v1/logship_grpc.pb.go b/api/logship/v1/logship_grpc.pb.go new file mode 100644 index 00000000000..75edd987d54 --- /dev/null +++ b/api/logship/v1/logship_grpc.pb.go @@ -0,0 +1,120 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.6.0 +// - protoc (unknown) +// source: logship/v1/logship.proto + +package logshipv1 + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + LogShipService_Ship_FullMethodName = "/logship.v1.LogShipService/Ship" +) + +// LogShipServiceClient is the client API for LogShipService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +// +// LogShipService receives client and database logs from PMM Clients over the existing agent channel. +type LogShipServiceClient interface { + // Ship is a uni-directional stream of client/database log records from pmm-agent to pmm-managed. + Ship(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[ShipRequest, ShipResponse], error) +} + +type logShipServiceClient struct { + cc grpc.ClientConnInterface +} + +func NewLogShipServiceClient(cc grpc.ClientConnInterface) LogShipServiceClient { + return &logShipServiceClient{cc} +} + +func (c *logShipServiceClient) Ship(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[ShipRequest, ShipResponse], error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + stream, err := c.cc.NewStream(ctx, &LogShipService_ServiceDesc.Streams[0], LogShipService_Ship_FullMethodName, cOpts...) + if err != nil { + return nil, err + } + x := &grpc.GenericClientStream[ShipRequest, ShipResponse]{ClientStream: stream} + return x, nil +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type LogShipService_ShipClient = grpc.ClientStreamingClient[ShipRequest, ShipResponse] + +// LogShipServiceServer is the server API for LogShipService service. +// All implementations must embed UnimplementedLogShipServiceServer +// for forward compatibility. +// +// LogShipService receives client and database logs from PMM Clients over the existing agent channel. +type LogShipServiceServer interface { + // Ship is a uni-directional stream of client/database log records from pmm-agent to pmm-managed. + Ship(grpc.ClientStreamingServer[ShipRequest, ShipResponse]) error + mustEmbedUnimplementedLogShipServiceServer() +} + +// UnimplementedLogShipServiceServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedLogShipServiceServer struct{} + +func (UnimplementedLogShipServiceServer) Ship(grpc.ClientStreamingServer[ShipRequest, ShipResponse]) error { + return status.Error(codes.Unimplemented, "method Ship not implemented") +} +func (UnimplementedLogShipServiceServer) mustEmbedUnimplementedLogShipServiceServer() {} +func (UnimplementedLogShipServiceServer) testEmbeddedByValue() {} + +// UnsafeLogShipServiceServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to LogShipServiceServer will +// result in compilation errors. +type UnsafeLogShipServiceServer interface { + mustEmbedUnimplementedLogShipServiceServer() +} + +func RegisterLogShipServiceServer(s grpc.ServiceRegistrar, srv LogShipServiceServer) { + // If the following call panics, it indicates UnimplementedLogShipServiceServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&LogShipService_ServiceDesc, srv) +} + +func _LogShipService_Ship_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(LogShipServiceServer).Ship(&grpc.GenericServerStream[ShipRequest, ShipResponse]{ServerStream: stream}) +} + +// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name. +type LogShipService_ShipServer = grpc.ClientStreamingServer[ShipRequest, ShipResponse] + +// LogShipService_ServiceDesc is the grpc.ServiceDesc for LogShipService service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var LogShipService_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "logship.v1.LogShipService", + HandlerType: (*LogShipServiceServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ + { + StreamName: "Ship", + Handler: _LogShipService_Ship_Handler, + ClientStreams: true, + }, + }, + Metadata: "logship/v1/logship.proto", +} diff --git a/api/management/v1/json/client/management_service/add_service_responses.go b/api/management/v1/json/client/management_service/add_service_responses.go index 357450d0c64..a33b14b1373 100644 --- a/api/management/v1/json/client/management_service/add_service_responses.go +++ b/api/management/v1/json/client/management_service/add_service_responses.go @@ -10515,6 +10515,12 @@ type AddServiceParamsBodyMysql struct { // If true, adds qan-mysql-slowlog-agent for provided service. QANMysqlSlowlog bool `json:"qan_mysql_slowlog,omitempty"` + // Watch this service's database log files and ship them to PMM Server. + WatchLogs bool `json:"watch_logs,omitempty"` + + // Absolute paths of the database log files to watch. + LogFiles []string `json:"log_files,omitempty"` + // Custom user-assigned labels for Service. CustomLabels map[string]string `json:"custom_labels,omitempty"` diff --git a/api/management/v1/mysql.pb.go b/api/management/v1/mysql.pb.go index 18f64740d99..ac2ed56e903 100644 --- a/api/management/v1/mysql.pb.go +++ b/api/management/v1/mysql.pb.go @@ -7,17 +7,15 @@ package managementv1 import ( - reflect "reflect" - sync "sync" - unsafe "unsafe" - _ "github.com/envoyproxy/protoc-gen-validate/validate" + _ "github.com/percona/pmm/api/extensions/v1" + v1 "github.com/percona/pmm/api/inventory/v1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" - - _ "github.com/percona/pmm/api/extensions/v1" - v1 "github.com/percona/pmm/api/inventory/v1" + reflect "reflect" + sync "sync" + unsafe "unsafe" ) const ( @@ -109,8 +107,12 @@ type AddMySQLServiceParams struct { ExtraDsnParams map[string]string `protobuf:"bytes,33,rep,name=extra_dsn_params,json=extraDsnParams,proto3" json:"extra_dsn_params,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Connection timeout for exporter (if set). ConnectionTimeout *durationpb.Duration `protobuf:"bytes,34,opt,name=connection_timeout,json=connectionTimeout,proto3" json:"connection_timeout,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // Watch this service's database log files and ship them to PMM Server. + WatchLogs bool `protobuf:"varint,35,opt,name=watch_logs,json=watchLogs,proto3" json:"watch_logs,omitempty"` + // Absolute paths of the database log files to watch (e.g. the MySQL error log). + LogFiles []string `protobuf:"bytes,36,rep,name=log_files,json=logFiles,proto3" json:"log_files,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AddMySQLServiceParams) Reset() { @@ -381,6 +383,20 @@ func (x *AddMySQLServiceParams) GetConnectionTimeout() *durationpb.Duration { return nil } +func (x *AddMySQLServiceParams) GetWatchLogs() bool { + if x != nil { + return x.WatchLogs + } + return false +} + +func (x *AddMySQLServiceParams) GetLogFiles() []string { + if x != nil { + return x.LogFiles + } + return nil +} + type MySQLServiceResult struct { state protoimpl.MessageState `protogen:"open.v1"` Service *v1.MySQLService `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"` @@ -462,7 +478,7 @@ var File_management_v1_mysql_proto protoreflect.FileDescriptor const file_management_v1_mysql_proto_rawDesc = "" + "\n" + - "\x19management/v1/mysql.proto\x12\rmanagement.v1\x1a\x1aextensions/v1/redact.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\x96\r\n" + + "\x19management/v1/mysql.proto\x12\rmanagement.v1\x1a\x1aextensions/v1/redact.proto\x1a\x1egoogle/protobuf/duration.proto\x1a\x19inventory/v1/agents.proto\x1a\x1cinventory/v1/log_level.proto\x1a\x1binventory/v1/services.proto\x1a\x1bmanagement/v1/metrics.proto\x1a\x18management/v1/node.proto\x1a\x17validate/validate.proto\"\xd2\r\n" + "\x15AddMySQLServiceParams\x12\x17\n" + "\anode_id\x18\x01 \x01(\tR\x06nodeId\x12\x1b\n" + "\tnode_name\x18\x02 \x01(\tR\bnodeName\x127\n" + @@ -499,7 +515,10 @@ const file_management_v1_mysql_proto_rawDesc = "" + "\tlog_level\x18\x1f \x01(\x0e2\x16.inventory.v1.LogLevelR\blogLevel\x12'\n" + "\x0fexpose_exporter\x18 \x01(\bR\x0eexposeExporter\x12b\n" + "\x10extra_dsn_params\x18! \x03(\v28.management.v1.AddMySQLServiceParams.ExtraDsnParamsEntryR\x0eextraDsnParams\x12R\n" + - "\x12connection_timeout\x18\" \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x1a?\n" + + "\x12connection_timeout\x18\" \x01(\v2\x19.google.protobuf.DurationB\b\xfaB\x05\xaa\x01\x022\x00R\x11connectionTimeout\x12\x1d\n" + + "\n" + + "watch_logs\x18# \x01(\bR\twatchLogs\x12\x1b\n" + + "\tlog_files\x18$ \x03(\tR\blogFiles\x1a?\n" + "\x11CustomLabelsEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\x1aA\n" + @@ -528,24 +547,21 @@ func file_management_v1_mysql_proto_rawDescGZIP() []byte { return file_management_v1_mysql_proto_rawDescData } -var ( - file_management_v1_mysql_proto_msgTypes = make([]protoimpl.MessageInfo, 4) - file_management_v1_mysql_proto_goTypes = []any{ - (*AddMySQLServiceParams)(nil), // 0: management.v1.AddMySQLServiceParams - (*MySQLServiceResult)(nil), // 1: management.v1.MySQLServiceResult - nil, // 2: management.v1.AddMySQLServiceParams.CustomLabelsEntry - nil, // 3: management.v1.AddMySQLServiceParams.ExtraDsnParamsEntry - (*AddNodeParams)(nil), // 4: management.v1.AddNodeParams - MetricsMode(0), // 5: management.v1.MetricsMode - v1.LogLevel(0), // 6: inventory.v1.LogLevel - (*durationpb.Duration)(nil), // 7: google.protobuf.Duration - (*v1.MySQLService)(nil), // 8: inventory.v1.MySQLService - (*v1.MySQLdExporter)(nil), // 9: inventory.v1.MySQLdExporter - (*v1.QANMySQLPerfSchemaAgent)(nil), // 10: inventory.v1.QANMySQLPerfSchemaAgent - (*v1.QANMySQLSlowlogAgent)(nil), // 11: inventory.v1.QANMySQLSlowlogAgent - } -) - +var file_management_v1_mysql_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_management_v1_mysql_proto_goTypes = []any{ + (*AddMySQLServiceParams)(nil), // 0: management.v1.AddMySQLServiceParams + (*MySQLServiceResult)(nil), // 1: management.v1.MySQLServiceResult + nil, // 2: management.v1.AddMySQLServiceParams.CustomLabelsEntry + nil, // 3: management.v1.AddMySQLServiceParams.ExtraDsnParamsEntry + (*AddNodeParams)(nil), // 4: management.v1.AddNodeParams + (MetricsMode)(0), // 5: management.v1.MetricsMode + (v1.LogLevel)(0), // 6: inventory.v1.LogLevel + (*durationpb.Duration)(nil), // 7: google.protobuf.Duration + (*v1.MySQLService)(nil), // 8: inventory.v1.MySQLService + (*v1.MySQLdExporter)(nil), // 9: inventory.v1.MySQLdExporter + (*v1.QANMySQLPerfSchemaAgent)(nil), // 10: inventory.v1.QANMySQLPerfSchemaAgent + (*v1.QANMySQLSlowlogAgent)(nil), // 11: inventory.v1.QANMySQLSlowlogAgent +} var file_management_v1_mysql_proto_depIdxs = []int32{ 4, // 0: management.v1.AddMySQLServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddMySQLServiceParams.custom_labels:type_name -> management.v1.AddMySQLServiceParams.CustomLabelsEntry diff --git a/api/management/v1/mysql.pb.validate.go b/api/management/v1/mysql.pb.validate.go index e0113114c7d..1a6f2059526 100644 --- a/api/management/v1/mysql.pb.validate.go +++ b/api/management/v1/mysql.pb.validate.go @@ -209,6 +209,8 @@ func (m *AddMySQLServiceParams) validate(all bool) error { } } + // no validation rules for WatchLogs + if len(errors) > 0 { return AddMySQLServiceParamsMultiError(errors) } @@ -276,8 +278,7 @@ func (e AddMySQLServiceParamsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AddMySQLServiceParamsValidationError{} @@ -497,8 +498,7 @@ func (e MySQLServiceResultValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = MySQLServiceResultValidationError{} diff --git a/api/management/v1/mysql.proto b/api/management/v1/mysql.proto index bdf3e8fcb9b..8f5ed44e7e6 100644 --- a/api/management/v1/mysql.proto +++ b/api/management/v1/mysql.proto @@ -99,6 +99,10 @@ message AddMySQLServiceParams { google.protobuf.Duration connection_timeout = 34 [(validate.rules).duration = { gte: {seconds: 0} }]; + // Watch this service's database log files and ship them to PMM Server. + bool watch_logs = 35; + // Absolute paths of the database log files to watch (e.g. the MySQL error log). + repeated string log_files = 36; } message MySQLServiceResult { diff --git a/api/server/v1/server.pb.go b/api/server/v1/server.pb.go index b5772139c0a..871f2d3c9ae 100644 --- a/api/server/v1/server.pb.go +++ b/api/server/v1/server.pb.go @@ -7,19 +7,17 @@ package serverv1 import ( - reflect "reflect" - sync "sync" - unsafe "unsafe" - _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" + common "github.com/percona/pmm/api/common" + _ "github.com/percona/pmm/api/extensions/v1" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" - - common "github.com/percona/pmm/api/common" - _ "github.com/percona/pmm/api/extensions/v1" + reflect "reflect" + sync "sync" + unsafe "unsafe" ) const ( @@ -1101,8 +1099,10 @@ type Settings struct { EnableInternalPgQan bool `protobuf:"varint,19,opt,name=enable_internal_pg_qan,json=enableInternalPgQan,proto3" json:"enable_internal_pg_qan,omitempty"` // Duration for which an update is snoozed UpdateSnoozeDuration *durationpb.Duration `protobuf:"bytes,20,opt,name=update_snooze_duration,json=updateSnoozeDuration,proto3" json:"update_snooze_duration,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces). + LogsRetention *durationpb.Duration `protobuf:"bytes,21,opt,name=logs_retention,json=logsRetention,proto3" json:"logs_retention,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Settings) Reset() { @@ -1270,6 +1270,13 @@ func (x *Settings) GetUpdateSnoozeDuration() *durationpb.Duration { return nil } +func (x *Settings) GetLogsRetention() *durationpb.Duration { + if x != nil { + return x.LogsRetention + } + return nil +} + // ReadOnlySettings represents a stripped-down version of PMM Server settings that can be accessed by users of all roles. type ReadOnlySettings struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -1566,8 +1573,10 @@ type ChangeSettingsRequest struct { EnableInternalPgQan *bool `protobuf:"varint,14,opt,name=enable_internal_pg_qan,json=enableInternalPgQan,proto3,oneof" json:"enable_internal_pg_qan,omitempty"` // A number of full days for which an update is snoozed, i.e. a multiple of 24h: 2592000s, 43200m, 720h. UpdateSnoozeDuration *durationpb.Duration `protobuf:"bytes,15,opt,name=update_snooze_duration,json=updateSnoozeDuration,proto3" json:"update_snooze_duration,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + // A number of full days for log and trace data retention in ClickHouse. Should have a suffix in JSON: 2592000s, 43200m, 720h. + LogsRetention *durationpb.Duration `protobuf:"bytes,16,opt,name=logs_retention,json=logsRetention,proto3" json:"logs_retention,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ChangeSettingsRequest) Reset() { @@ -1705,6 +1714,13 @@ func (x *ChangeSettingsRequest) GetUpdateSnoozeDuration() *durationpb.Duration { return nil } +func (x *ChangeSettingsRequest) GetLogsRetention() *durationpb.Duration { + if x != nil { + return x.LogsRetention + } + return nil +} + type ChangeSettingsResponse struct { state protoimpl.MessageState `protogen:"open.v1"` Settings *Settings `protobuf:"bytes,1,opt,name=settings,proto3" json:"settings,omitempty"` @@ -1814,7 +1830,7 @@ const file_server_v1_server_proto_rawDesc = "" + "\x13AdvisorRunIntervals\x12F\n" + "\x11standard_interval\x18\x01 \x01(\v2\x19.google.protobuf.DurationR\x10standardInterval\x12>\n" + "\rrare_interval\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\frareInterval\x12F\n" + - "\x11frequent_interval\x18\x03 \x01(\v2\x19.google.protobuf.DurationR\x10frequentInterval\"\xef\a\n" + + "\x11frequent_interval\x18\x03 \x01(\v2\x19.google.protobuf.DurationR\x10frequentInterval\"\xb1\b\n" + "\bSettings\x12'\n" + "\x0fupdates_enabled\x18\x01 \x01(\bR\x0eupdatesEnabled\x12+\n" + "\x11telemetry_enabled\x18\x02 \x01(\bR\x10telemetryEnabled\x12N\n" + @@ -1835,7 +1851,8 @@ const file_server_v1_server_proto_rawDesc = "" + "\x15enable_access_control\x18\x11 \x01(\bR\x13enableAccessControl\x12&\n" + "\x0fdefault_role_id\x18\x12 \x01(\rR\rdefaultRoleId\x123\n" + "\x16enable_internal_pg_qan\x18\x13 \x01(\bR\x13enableInternalPgQan\x12O\n" + - "\x16update_snooze_duration\x18\x14 \x01(\v2\x19.google.protobuf.DurationR\x14updateSnoozeDuration\"\x8f\x03\n" + + "\x16update_snooze_duration\x18\x14 \x01(\v2\x19.google.protobuf.DurationR\x14updateSnoozeDuration\x12@\n" + + "\x0elogs_retention\x18\x15 \x01(\v2\x19.google.protobuf.DurationR\rlogsRetention\"\x8f\x03\n" + "\x10ReadOnlySettings\x12'\n" + "\x0fupdates_enabled\x18\x01 \x01(\bR\x0eupdatesEnabled\x12+\n" + "\x11telemetry_enabled\x18\x02 \x01(\bR\x10telemetryEnabled\x12'\n" + @@ -1850,7 +1867,7 @@ const file_server_v1_server_proto_rawDesc = "" + "\x13GetSettingsResponse\x12/\n" + "\bsettings\x18\x01 \x01(\v2\x13.server.v1.SettingsR\bsettings\"V\n" + "\x1bGetReadOnlySettingsResponse\x127\n" + - "\bsettings\x18\x01 \x01(\v2\x1b.server.v1.ReadOnlySettingsR\bsettings\"\xf0\b\n" + + "\bsettings\x18\x01 \x01(\v2\x1b.server.v1.ReadOnlySettingsR\bsettings\"\xb2\t\n" + "\x15ChangeSettingsRequest\x12*\n" + "\x0eenable_updates\x18\x01 \x01(\bH\x00R\renableUpdates\x88\x01\x01\x12.\n" + "\x10enable_telemetry\x18\x02 \x01(\bH\x01R\x0fenableTelemetry\x88\x01\x01\x12N\n" + @@ -1868,7 +1885,8 @@ const file_server_v1_server_proto_rawDesc = "" + "\x15enable_access_control\x18\r \x01(\bH\tR\x13enableAccessControl\x88\x01\x01\x128\n" + "\x16enable_internal_pg_qan\x18\x0e \x01(\bH\n" + "R\x13enableInternalPgQan\x88\x01\x01\x12O\n" + - "\x16update_snooze_duration\x18\x0f \x01(\v2\x19.google.protobuf.DurationR\x14updateSnoozeDurationB\x11\n" + + "\x16update_snooze_duration\x18\x0f \x01(\v2\x19.google.protobuf.DurationR\x14updateSnoozeDuration\x12@\n" + + "\x0elogs_retention\x18\x10 \x01(\v2\x19.google.protobuf.DurationR\rlogsRetentionB\x11\n" + "\x0f_enable_updatesB\x13\n" + "\x11_enable_telemetryB\n" + "\n" + @@ -1916,43 +1934,40 @@ func file_server_v1_server_proto_rawDescGZIP() []byte { return file_server_v1_server_proto_rawDescData } -var ( - file_server_v1_server_proto_enumTypes = make([]protoimpl.EnumInfo, 1) - file_server_v1_server_proto_msgTypes = make([]protoimpl.MessageInfo, 26) - file_server_v1_server_proto_goTypes = []any{ - DistributionMethod(0), // 0: server.v1.DistributionMethod - (*VersionInfo)(nil), // 1: server.v1.VersionInfo - (*VersionRequest)(nil), // 2: server.v1.VersionRequest - (*VersionResponse)(nil), // 3: server.v1.VersionResponse - (*ReadinessRequest)(nil), // 4: server.v1.ReadinessRequest - (*ReadinessResponse)(nil), // 5: server.v1.ReadinessResponse - (*LeaderHealthCheckRequest)(nil), // 6: server.v1.LeaderHealthCheckRequest - (*LeaderHealthCheckResponse)(nil), // 7: server.v1.LeaderHealthCheckResponse - (*CheckUpdatesRequest)(nil), // 8: server.v1.CheckUpdatesRequest - (*DockerVersionInfo)(nil), // 9: server.v1.DockerVersionInfo - (*CheckUpdatesResponse)(nil), // 10: server.v1.CheckUpdatesResponse - (*ListChangeLogsRequest)(nil), // 11: server.v1.ListChangeLogsRequest - (*ListChangeLogsResponse)(nil), // 12: server.v1.ListChangeLogsResponse - (*StartUpdateRequest)(nil), // 13: server.v1.StartUpdateRequest - (*StartUpdateResponse)(nil), // 14: server.v1.StartUpdateResponse - (*UpdateStatusRequest)(nil), // 15: server.v1.UpdateStatusRequest - (*UpdateStatusResponse)(nil), // 16: server.v1.UpdateStatusResponse - (*MetricsResolutions)(nil), // 17: server.v1.MetricsResolutions - (*AdvisorRunIntervals)(nil), // 18: server.v1.AdvisorRunIntervals - (*Settings)(nil), // 19: server.v1.Settings - (*ReadOnlySettings)(nil), // 20: server.v1.ReadOnlySettings - (*GetSettingsRequest)(nil), // 21: server.v1.GetSettingsRequest - (*GetReadOnlySettingsRequest)(nil), // 22: server.v1.GetReadOnlySettingsRequest - (*GetSettingsResponse)(nil), // 23: server.v1.GetSettingsResponse - (*GetReadOnlySettingsResponse)(nil), // 24: server.v1.GetReadOnlySettingsResponse - (*ChangeSettingsRequest)(nil), // 25: server.v1.ChangeSettingsRequest - (*ChangeSettingsResponse)(nil), // 26: server.v1.ChangeSettingsResponse - (*timestamppb.Timestamp)(nil), // 27: google.protobuf.Timestamp - (*durationpb.Duration)(nil), // 28: google.protobuf.Duration - (*common.StringArray)(nil), // 29: common.StringArray - } -) - +var file_server_v1_server_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_server_v1_server_proto_msgTypes = make([]protoimpl.MessageInfo, 26) +var file_server_v1_server_proto_goTypes = []any{ + (DistributionMethod)(0), // 0: server.v1.DistributionMethod + (*VersionInfo)(nil), // 1: server.v1.VersionInfo + (*VersionRequest)(nil), // 2: server.v1.VersionRequest + (*VersionResponse)(nil), // 3: server.v1.VersionResponse + (*ReadinessRequest)(nil), // 4: server.v1.ReadinessRequest + (*ReadinessResponse)(nil), // 5: server.v1.ReadinessResponse + (*LeaderHealthCheckRequest)(nil), // 6: server.v1.LeaderHealthCheckRequest + (*LeaderHealthCheckResponse)(nil), // 7: server.v1.LeaderHealthCheckResponse + (*CheckUpdatesRequest)(nil), // 8: server.v1.CheckUpdatesRequest + (*DockerVersionInfo)(nil), // 9: server.v1.DockerVersionInfo + (*CheckUpdatesResponse)(nil), // 10: server.v1.CheckUpdatesResponse + (*ListChangeLogsRequest)(nil), // 11: server.v1.ListChangeLogsRequest + (*ListChangeLogsResponse)(nil), // 12: server.v1.ListChangeLogsResponse + (*StartUpdateRequest)(nil), // 13: server.v1.StartUpdateRequest + (*StartUpdateResponse)(nil), // 14: server.v1.StartUpdateResponse + (*UpdateStatusRequest)(nil), // 15: server.v1.UpdateStatusRequest + (*UpdateStatusResponse)(nil), // 16: server.v1.UpdateStatusResponse + (*MetricsResolutions)(nil), // 17: server.v1.MetricsResolutions + (*AdvisorRunIntervals)(nil), // 18: server.v1.AdvisorRunIntervals + (*Settings)(nil), // 19: server.v1.Settings + (*ReadOnlySettings)(nil), // 20: server.v1.ReadOnlySettings + (*GetSettingsRequest)(nil), // 21: server.v1.GetSettingsRequest + (*GetReadOnlySettingsRequest)(nil), // 22: server.v1.GetReadOnlySettingsRequest + (*GetSettingsResponse)(nil), // 23: server.v1.GetSettingsResponse + (*GetReadOnlySettingsResponse)(nil), // 24: server.v1.GetReadOnlySettingsResponse + (*ChangeSettingsRequest)(nil), // 25: server.v1.ChangeSettingsRequest + (*ChangeSettingsResponse)(nil), // 26: server.v1.ChangeSettingsResponse + (*timestamppb.Timestamp)(nil), // 27: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 28: google.protobuf.Duration + (*common.StringArray)(nil), // 29: common.StringArray +} var file_server_v1_server_proto_depIdxs = []int32{ 27, // 0: server.v1.VersionInfo.timestamp:type_name -> google.protobuf.Timestamp 1, // 1: server.v1.VersionResponse.server:type_name -> server.v1.VersionInfo @@ -1974,39 +1989,41 @@ var file_server_v1_server_proto_depIdxs = []int32{ 28, // 17: server.v1.Settings.data_retention:type_name -> google.protobuf.Duration 18, // 18: server.v1.Settings.advisor_run_intervals:type_name -> server.v1.AdvisorRunIntervals 28, // 19: server.v1.Settings.update_snooze_duration:type_name -> google.protobuf.Duration - 19, // 20: server.v1.GetSettingsResponse.settings:type_name -> server.v1.Settings - 20, // 21: server.v1.GetReadOnlySettingsResponse.settings:type_name -> server.v1.ReadOnlySettings - 17, // 22: server.v1.ChangeSettingsRequest.metrics_resolutions:type_name -> server.v1.MetricsResolutions - 28, // 23: server.v1.ChangeSettingsRequest.data_retention:type_name -> google.protobuf.Duration - 29, // 24: server.v1.ChangeSettingsRequest.aws_partitions:type_name -> common.StringArray - 18, // 25: server.v1.ChangeSettingsRequest.advisor_run_intervals:type_name -> server.v1.AdvisorRunIntervals - 28, // 26: server.v1.ChangeSettingsRequest.update_snooze_duration:type_name -> google.protobuf.Duration - 19, // 27: server.v1.ChangeSettingsResponse.settings:type_name -> server.v1.Settings - 2, // 28: server.v1.ServerService.Version:input_type -> server.v1.VersionRequest - 4, // 29: server.v1.ServerService.Readiness:input_type -> server.v1.ReadinessRequest - 6, // 30: server.v1.ServerService.LeaderHealthCheck:input_type -> server.v1.LeaderHealthCheckRequest - 8, // 31: server.v1.ServerService.CheckUpdates:input_type -> server.v1.CheckUpdatesRequest - 11, // 32: server.v1.ServerService.ListChangeLogs:input_type -> server.v1.ListChangeLogsRequest - 13, // 33: server.v1.ServerService.StartUpdate:input_type -> server.v1.StartUpdateRequest - 15, // 34: server.v1.ServerService.UpdateStatus:input_type -> server.v1.UpdateStatusRequest - 21, // 35: server.v1.ServerService.GetSettings:input_type -> server.v1.GetSettingsRequest - 22, // 36: server.v1.ServerService.GetReadOnlySettings:input_type -> server.v1.GetReadOnlySettingsRequest - 25, // 37: server.v1.ServerService.ChangeSettings:input_type -> server.v1.ChangeSettingsRequest - 3, // 38: server.v1.ServerService.Version:output_type -> server.v1.VersionResponse - 5, // 39: server.v1.ServerService.Readiness:output_type -> server.v1.ReadinessResponse - 7, // 40: server.v1.ServerService.LeaderHealthCheck:output_type -> server.v1.LeaderHealthCheckResponse - 10, // 41: server.v1.ServerService.CheckUpdates:output_type -> server.v1.CheckUpdatesResponse - 12, // 42: server.v1.ServerService.ListChangeLogs:output_type -> server.v1.ListChangeLogsResponse - 14, // 43: server.v1.ServerService.StartUpdate:output_type -> server.v1.StartUpdateResponse - 16, // 44: server.v1.ServerService.UpdateStatus:output_type -> server.v1.UpdateStatusResponse - 23, // 45: server.v1.ServerService.GetSettings:output_type -> server.v1.GetSettingsResponse - 24, // 46: server.v1.ServerService.GetReadOnlySettings:output_type -> server.v1.GetReadOnlySettingsResponse - 26, // 47: server.v1.ServerService.ChangeSettings:output_type -> server.v1.ChangeSettingsResponse - 38, // [38:48] is the sub-list for method output_type - 28, // [28:38] is the sub-list for method input_type - 28, // [28:28] is the sub-list for extension type_name - 28, // [28:28] is the sub-list for extension extendee - 0, // [0:28] is the sub-list for field type_name + 28, // 20: server.v1.Settings.logs_retention:type_name -> google.protobuf.Duration + 19, // 21: server.v1.GetSettingsResponse.settings:type_name -> server.v1.Settings + 20, // 22: server.v1.GetReadOnlySettingsResponse.settings:type_name -> server.v1.ReadOnlySettings + 17, // 23: server.v1.ChangeSettingsRequest.metrics_resolutions:type_name -> server.v1.MetricsResolutions + 28, // 24: server.v1.ChangeSettingsRequest.data_retention:type_name -> google.protobuf.Duration + 29, // 25: server.v1.ChangeSettingsRequest.aws_partitions:type_name -> common.StringArray + 18, // 26: server.v1.ChangeSettingsRequest.advisor_run_intervals:type_name -> server.v1.AdvisorRunIntervals + 28, // 27: server.v1.ChangeSettingsRequest.update_snooze_duration:type_name -> google.protobuf.Duration + 28, // 28: server.v1.ChangeSettingsRequest.logs_retention:type_name -> google.protobuf.Duration + 19, // 29: server.v1.ChangeSettingsResponse.settings:type_name -> server.v1.Settings + 2, // 30: server.v1.ServerService.Version:input_type -> server.v1.VersionRequest + 4, // 31: server.v1.ServerService.Readiness:input_type -> server.v1.ReadinessRequest + 6, // 32: server.v1.ServerService.LeaderHealthCheck:input_type -> server.v1.LeaderHealthCheckRequest + 8, // 33: server.v1.ServerService.CheckUpdates:input_type -> server.v1.CheckUpdatesRequest + 11, // 34: server.v1.ServerService.ListChangeLogs:input_type -> server.v1.ListChangeLogsRequest + 13, // 35: server.v1.ServerService.StartUpdate:input_type -> server.v1.StartUpdateRequest + 15, // 36: server.v1.ServerService.UpdateStatus:input_type -> server.v1.UpdateStatusRequest + 21, // 37: server.v1.ServerService.GetSettings:input_type -> server.v1.GetSettingsRequest + 22, // 38: server.v1.ServerService.GetReadOnlySettings:input_type -> server.v1.GetReadOnlySettingsRequest + 25, // 39: server.v1.ServerService.ChangeSettings:input_type -> server.v1.ChangeSettingsRequest + 3, // 40: server.v1.ServerService.Version:output_type -> server.v1.VersionResponse + 5, // 41: server.v1.ServerService.Readiness:output_type -> server.v1.ReadinessResponse + 7, // 42: server.v1.ServerService.LeaderHealthCheck:output_type -> server.v1.LeaderHealthCheckResponse + 10, // 43: server.v1.ServerService.CheckUpdates:output_type -> server.v1.CheckUpdatesResponse + 12, // 44: server.v1.ServerService.ListChangeLogs:output_type -> server.v1.ListChangeLogsResponse + 14, // 45: server.v1.ServerService.StartUpdate:output_type -> server.v1.StartUpdateResponse + 16, // 46: server.v1.ServerService.UpdateStatus:output_type -> server.v1.UpdateStatusResponse + 23, // 47: server.v1.ServerService.GetSettings:output_type -> server.v1.GetSettingsResponse + 24, // 48: server.v1.ServerService.GetReadOnlySettings:output_type -> server.v1.GetReadOnlySettingsResponse + 26, // 49: server.v1.ServerService.ChangeSettings:output_type -> server.v1.ChangeSettingsResponse + 40, // [40:50] is the sub-list for method output_type + 30, // [30:40] is the sub-list for method input_type + 30, // [30:30] is the sub-list for extension type_name + 30, // [30:30] is the sub-list for extension extendee + 0, // [0:30] is the sub-list for field type_name } func init() { file_server_v1_server_proto_init() } diff --git a/api/server/v1/server.pb.validate.go b/api/server/v1/server.pb.validate.go index e2643c4aa5b..77f567a4d28 100644 --- a/api/server/v1/server.pb.validate.go +++ b/api/server/v1/server.pb.validate.go @@ -154,8 +154,7 @@ func (e VersionInfoValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = VersionInfoValidationError{} @@ -257,8 +256,7 @@ func (e VersionRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = VersionRequestValidationError{} @@ -420,8 +418,7 @@ func (e VersionResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = VersionResponseValidationError{} @@ -521,8 +518,7 @@ func (e ReadinessRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ReadinessRequestValidationError{} @@ -624,8 +620,7 @@ func (e ReadinessResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ReadinessResponseValidationError{} @@ -727,8 +722,7 @@ func (e LeaderHealthCheckRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = LeaderHealthCheckRequestValidationError{} @@ -830,8 +824,7 @@ func (e LeaderHealthCheckResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = LeaderHealthCheckResponseValidationError{} @@ -937,8 +930,7 @@ func (e CheckUpdatesRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = CheckUpdatesRequestValidationError{} @@ -1077,8 +1069,7 @@ func (e DockerVersionInfoValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = DockerVersionInfoValidationError{} @@ -1271,8 +1262,7 @@ func (e CheckUpdatesResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = CheckUpdatesResponseValidationError{} @@ -1374,8 +1364,7 @@ func (e ListChangeLogsRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ListChangeLogsRequestValidationError{} @@ -1540,8 +1529,7 @@ func (e ListChangeLogsResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ListChangeLogsResponseValidationError{} @@ -1645,8 +1633,7 @@ func (e StartUpdateRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartUpdateRequestValidationError{} @@ -1752,8 +1739,7 @@ func (e StartUpdateResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = StartUpdateResponseValidationError{} @@ -1859,8 +1845,7 @@ func (e UpdateStatusRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = UpdateStatusRequestValidationError{} @@ -1966,8 +1951,7 @@ func (e UpdateStatusResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = UpdateStatusResponseValidationError{} @@ -2156,8 +2140,7 @@ func (e MetricsResolutionsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = MetricsResolutionsValidationError{} @@ -2346,8 +2329,7 @@ func (e AdvisorRunIntervalsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = AdvisorRunIntervalsValidationError{} @@ -2524,6 +2506,35 @@ func (m *Settings) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetLogsRetention()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, SettingsValidationError{ + field: "LogsRetention", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, SettingsValidationError{ + field: "LogsRetention", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLogsRetention()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SettingsValidationError{ + field: "LogsRetention", + reason: "embedded message failed validation", + cause: err, + } + } + } + if len(errors) > 0 { return SettingsMultiError(errors) } @@ -2588,8 +2599,7 @@ func (e SettingsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = SettingsValidationError{} @@ -2705,8 +2715,7 @@ func (e ReadOnlySettingsValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ReadOnlySettingsValidationError{} @@ -2808,8 +2817,7 @@ func (e GetSettingsRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetSettingsRequestValidationError{} @@ -2911,8 +2919,7 @@ func (e GetReadOnlySettingsRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetReadOnlySettingsRequestValidationError{} @@ -3043,8 +3050,7 @@ func (e GetSettingsResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetSettingsResponseValidationError{} @@ -3176,8 +3182,7 @@ func (e GetReadOnlySettingsResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = GetReadOnlySettingsResponseValidationError{} @@ -3328,6 +3333,35 @@ func (m *ChangeSettingsRequest) validate(all bool) error { } } + if all { + switch v := interface{}(m.GetLogsRetention()).(type) { + case interface{ ValidateAll() error }: + if err := v.ValidateAll(); err != nil { + errors = append(errors, ChangeSettingsRequestValidationError{ + field: "LogsRetention", + reason: "embedded message failed validation", + cause: err, + }) + } + case interface{ Validate() error }: + if err := v.Validate(); err != nil { + errors = append(errors, ChangeSettingsRequestValidationError{ + field: "LogsRetention", + reason: "embedded message failed validation", + cause: err, + }) + } + } + } else if v, ok := interface{}(m.GetLogsRetention()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChangeSettingsRequestValidationError{ + field: "LogsRetention", + reason: "embedded message failed validation", + cause: err, + } + } + } + if m.EnableUpdates != nil { // no validation rules for EnableUpdates } @@ -3341,6 +3375,7 @@ func (m *ChangeSettingsRequest) validate(all bool) error { } if m.AwsPartitions != nil { + if all { switch v := interface{}(m.GetAwsPartitions()).(type) { case interface{ ValidateAll() error }: @@ -3369,6 +3404,7 @@ func (m *ChangeSettingsRequest) validate(all bool) error { } } } + } if m.EnableAdvisor != nil { @@ -3466,8 +3502,7 @@ func (e ChangeSettingsRequestValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeSettingsRequestValidationError{} @@ -3598,8 +3633,7 @@ func (e ChangeSettingsResponseValidationError) Error() string { key, e.field, e.reason, - cause, - ) + cause) } var _ error = ChangeSettingsResponseValidationError{} diff --git a/api/server/v1/server.proto b/api/server/v1/server.proto index 51dc8b8f975..cd9d4a8df18 100644 --- a/api/server/v1/server.proto +++ b/api/server/v1/server.proto @@ -183,6 +183,8 @@ message Settings { bool enable_internal_pg_qan = 19; // Duration for which an update is snoozed google.protobuf.Duration update_snooze_duration = 20; + // A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces). + google.protobuf.Duration logs_retention = 21; } // ReadOnlySettings represents a stripped-down version of PMM Server settings that can be accessed by users of all roles. @@ -243,6 +245,8 @@ message ChangeSettingsRequest { optional bool enable_internal_pg_qan = 14; // A number of full days for which an update is snoozed, i.e. a multiple of 24h: 2592000s, 43200m, 720h. google.protobuf.Duration update_snooze_duration = 15; + // A number of full days for log and trace data retention in ClickHouse. Should have a suffix in JSON: 2592000s, 43200m, 720h. + google.protobuf.Duration logs_retention = 16; } message ChangeSettingsResponse { diff --git a/build/ansible/roles/grafana/files/datasources.yml b/build/ansible/roles/grafana/files/datasources.yml index de39551a3ba..0c972c55706 100644 --- a/build/ansible/roles/grafana/files/datasources.yml +++ b/build/ansible/roles/grafana/files/datasources.yml @@ -2,6 +2,8 @@ apiVersion: 1 deleteDatasources: - name: ClickHouse orgId: 1 + - name: ClickHouseLogs + orgId: 1 datasources: - name: Metrics @@ -51,3 +53,29 @@ datasources: tlsSkipVerify: false secureJsonData: password: ${PMM_CLICKHOUSE_PASSWORD} + +# Dedicated datasource for OpenTelemetry logs and traces (pmm.logs / pmm.traces) written by the +# OpenTelemetry Collector. Kept separate from the ClickHouse datasource above, which stays unchanged. +# otelEnabled maps the OTel columns automatically so Explore renders logs/traces without per-column config. +- name: ClickHouseLogs + orgId: 1 + version: 1 + type: grafana-clickhouse-datasource + jsonData: + username: ${PMM_CLICKHOUSE_USER} + port: ${PMM_CLICKHOUSE_PORT} + host: ${PMM_CLICKHOUSE_HOST} + tlsSkipVerify: false + defaultDatabase: pmm + logs: + defaultDatabase: pmm + defaultTable: logs + otelEnabled: true + otelVersion: latest + traces: + defaultDatabase: pmm + defaultTable: traces + otelEnabled: true + otelVersion: latest + secureJsonData: + password: ${PMM_CLICKHOUSE_PASSWORD} diff --git a/build/ansible/roles/otelcol/defaults/main.yml b/build/ansible/roles/otelcol/defaults/main.yml new file mode 100644 index 00000000000..3fa6d55f99f --- /dev/null +++ b/build/ansible/roles/otelcol/defaults/main.yml @@ -0,0 +1,7 @@ +# otelcol-contrib (OpenTelemetry Collector, contrib distribution) version. +# IMPORTANT: the clickhouseexporter schema is version-sensitive. This MUST stay in sync with the +# ClickHouse OTel schema in qan-api2/migrations/sql/23_logs.up.sql and 24_traces.up.sql — bump together. +otelcol_version: "0.120.0" +otelcol_arch_map: + x86_64: amd64 + aarch64: arm64 diff --git a/build/ansible/roles/otelcol/tasks/main.yml b/build/ansible/roles/otelcol/tasks/main.yml new file mode 100644 index 00000000000..69affd2be6b --- /dev/null +++ b/build/ansible/roles/otelcol/tasks/main.yml @@ -0,0 +1,30 @@ +--- +- name: Create otelcol config directory + file: + path: /etc/otelcol + state: directory + owner: pmm + group: root + mode: 0775 + +- name: Download otelcol-contrib + get_url: + url: "https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v{{ otelcol_version }}/otelcol-contrib_{{ otelcol_version }}_linux_{{ otelcol_arch_map[ansible_architecture] }}.tar.gz" + dest: /tmp/otelcol-contrib.tar.gz + mode: 0644 + +- name: Extract otelcol-contrib binary + unarchive: + src: /tmp/otelcol-contrib.tar.gz + dest: /usr/sbin + remote_src: yes + include: + - otelcol-contrib + owner: root + group: root + mode: 0755 + +- name: Remove otelcol-contrib tarball + file: + path: /tmp/otelcol-contrib.tar.gz + state: absent diff --git a/build/ansible/roles/pmm-images/tasks/main.yml b/build/ansible/roles/pmm-images/tasks/main.yml index f86a6d1d128..919c81325a8 100644 --- a/build/ansible/roles/pmm-images/tasks/main.yml +++ b/build/ansible/roles/pmm-images/tasks/main.yml @@ -121,6 +121,10 @@ include_role: name: clickhouse +- name: Install otelcol + include_role: + name: otelcol + - name: Install postgres include_role: name: postgres diff --git a/managed/cmd/pmm-managed-init/main.go b/managed/cmd/pmm-managed-init/main.go index ea4ed7f9042..10514e5c07a 100644 --- a/managed/cmd/pmm-managed-init/main.go +++ b/managed/cmd/pmm-managed-init/main.go @@ -66,4 +66,11 @@ func main() { logrus.Errorf("PMM Server configuration error: %s.", err) os.Exit(1) } + + // Render the OpenTelemetry Collector config. Retention is enforced on the ClickHouse tables by + // qan-api2, not by the collector, so the collector config does not depend on any setting. + if err := supervisord.SaveOtelcolConfig(); err != nil { + logrus.Errorf("OpenTelemetry Collector configuration error: %s.", err) + os.Exit(1) + } } diff --git a/managed/cmd/pmm-managed/main.go b/managed/cmd/pmm-managed/main.go index d2749a36d70..3b4d211adc2 100644 --- a/managed/cmd/pmm-managed/main.go +++ b/managed/cmd/pmm-managed/main.go @@ -71,6 +71,7 @@ import ( dumpv1beta1 "github.com/percona/pmm/api/dump/v1beta1" hav1beta1 "github.com/percona/pmm/api/ha/v1beta1" inventoryv1 "github.com/percona/pmm/api/inventory/v1" + logshipv1 "github.com/percona/pmm/api/logship/v1" managementv1 "github.com/percona/pmm/api/management/v1" rtav1 "github.com/percona/pmm/api/realtimeanalytics/v1" serverv1 "github.com/percona/pmm/api/server/v1" @@ -82,12 +83,14 @@ import ( "github.com/percona/pmm/managed/services/alerting" "github.com/percona/pmm/managed/services/backup" "github.com/percona/pmm/managed/services/checks" + "github.com/percona/pmm/managed/services/clickhouse" "github.com/percona/pmm/managed/services/config" //nolint:staticcheck "github.com/percona/pmm/managed/services/dump" "github.com/percona/pmm/managed/services/grafana" "github.com/percona/pmm/managed/services/ha" "github.com/percona/pmm/managed/services/inventory" inventorygrpc "github.com/percona/pmm/managed/services/inventory/grpc" + "github.com/percona/pmm/managed/services/logship" "github.com/percona/pmm/managed/services/management" managementbackup "github.com/percona/pmm/managed/services/management/backup" "github.com/percona/pmm/managed/services/management/common" @@ -314,6 +317,9 @@ func runGRPCServer(ctx context.Context, deps *gRPCServerDeps) { rtav1.RegisterRealtimeAnalyticsServiceServer(gRPCServer, rtaSvc) rtav1.RegisterCollectorServiceServer(gRPCServer, rtaSvc) + // Register the log-shipping service that forwards client/database logs to the local collector. + logshipv1.RegisterLogShipServiceServer(gRPCServer, logship.New(deps.db, logship.DefaultCollectorLogsEndpoint)) + // Start RTA store cleanup goroutine go rtaStore.Run(ctx) @@ -999,6 +1005,25 @@ func main() { //nolint:gocognit,maintidx,cyclop if err != nil { l.Fatalf("Could not create Clickhouse client: %s", err) } + + // pmm-managed owns the lifecycle (schema + retention TTL) of the OpenTelemetry logs/traces tables. + logsClickhouse := clickhouse.New(clickhouseClient, *clickhouseAddrF, *clickHouseDatabaseF, *clickhouseUsernameF, *clickhousePasswordF) + go func() { + // Migrations run independently of settings; only the initial TTL needs the retention setting. + if err := logsClickhouse.Bootstrap(ctx); err != nil { + l.Errorf("Could not bootstrap logs/traces schema: %s", err) + return + } + settings, err := models.GetSettings(db) + if err != nil { + l.Errorf("Could not load settings for initial logs retention TTL: %s", err) + return + } + if err := logsClickhouse.ApplyTTL(settings.LogsRetention); err != nil { + l.Errorf("Could not apply initial logs retention TTL: %s", err) + } + }() + externalExporterStatusSvc := agents.NewExternalExporterStatusService(db, v1.NewAPI(vmClient)) checksService := checks.New(db, actionsService, v1.NewAPI(vmClient), clickhouseClient) @@ -1042,6 +1067,7 @@ func main() { //nolint:gocognit,maintidx,cyclop HAService: haService, Nomad: nomad, QANClient: qanClient, + LogsClickhouse: logsClickhouse, } server, err := server.NewServer(serverParams) diff --git a/managed/data/alerting-templates/mysql_log_down.yml b/managed/data/alerting-templates/mysql_log_down.yml new file mode 100644 index 00000000000..553dfd3d35b --- /dev/null +++ b/managed/data/alerting-templates/mysql_log_down.yml @@ -0,0 +1,30 @@ +--- +templates: + - name: pmm_mysql_log_down + version: 1 + summary: MySQL down (detected in logs) + datasource: clickhouse + expr: |- + SELECT + ServiceName AS service_name, + count() AS value + FROM logs + WHERE TimestampTime >= now() - INTERVAL 5 MINUTE + AND ServiceName ILIKE '%mysql%' + AND (SeverityText IN ('ERROR', 'FATAL') + OR Body ILIKE '%shutdown complete%' + OR Body ILIKE '%Got signal % to shutdown%') + GROUP BY ServiceName + params: + - name: threshold + summary: Number of shutdown/error log lines in the window above which the alert fires + type: float + range: [0, 100000] + value: 0 + for: 1m + severity: critical + annotations: + summary: MySQL down ({{ $labels.service_name }}) + description: |- + MySQL {{ $labels.service_name }} reported {{ $value }} shutdown/error log lines in the last + 5 minutes (threshold [[ .threshold ]]). diff --git a/managed/models/agent_helpers.go b/managed/models/agent_helpers.go index 92c82e1ea96..d65ff4d4293 100644 --- a/managed/models/agent_helpers.go +++ b/managed/models/agent_helpers.go @@ -811,6 +811,7 @@ type CreateAgentParams struct { MySQLOptions MySQLOptions PostgreSQLOptions PostgreSQLOptions ValkeyOptions ValkeyOptions + LogWatcherOptions LogWatcherOptions } func compatibleNodeAndAgent(nodeType NodeType, agentType AgentType) bool { @@ -884,6 +885,12 @@ func compatibleServiceAndAgent(serviceType ServiceType, agentType AgentType) boo ExternalExporterType: { ExternalServiceType, }, + DBLogWatcherAgentType: { + MySQLServiceType, + PostgreSQLServiceType, + MongoDBServiceType, + ValkeyServiceType, + }, } allowed, ok := allow[agentType] @@ -952,6 +959,7 @@ func CreateAgent(q *reform.Querier, agentType AgentType, params *CreateAgentPara MySQLOptions: params.MySQLOptions, PostgreSQLOptions: params.PostgreSQLOptions, ValkeyOptions: params.ValkeyOptions, + LogWatcherOptions: params.LogWatcherOptions, LogLevel: pointer.ToStringOrNil(params.LogLevel), Disabled: params.Disabled, } diff --git a/managed/models/agent_model.go b/managed/models/agent_model.go index acdb3dd839e..3c146c234cf 100644 --- a/managed/models/agent_model.go +++ b/managed/models/agent_model.go @@ -83,6 +83,7 @@ const ( NomadAgentType AgentType = "nomad-agent" ValkeyExporterType AgentType = "valkey_exporter" RTAMongoDBAgentType AgentType = "rta-mongodb-agent" + DBLogWatcherAgentType AgentType = "db-log-watcher-agent" ) // GetRTAAgentTypes returns all Real-Time Analytics Agent types. @@ -154,6 +155,26 @@ func (c QANOptions) IsEmpty() bool { !c.CommentsParsingDisabled } +// WatchedLogFile is a single database log file watched by the DB log-watcher agent. +type WatchedLogFile struct { + Path string `json:"path"` + Type string `json:"type"` // error, slow or general +} + +// LogWatcherOptions represents structure for the database log-watcher agent options. +type LogWatcherOptions struct { + Files []WatchedLogFile `json:"files"` +} + +// Value implements database/sql/driver.Valuer interface. Should be defined on the value. +func (c LogWatcherOptions) Value() (driver.Value, error) { return jsonValue(c) } + +// Scan implements database/sql.Scanner interface. Should be defined on the pointer. +func (c *LogWatcherOptions) Scan(src any) error { return jsonScan(c, src) } + +// IsEmpty returns true if no log files are configured. +func (c LogWatcherOptions) IsEmpty() bool { return len(c.Files) == 0 } + // AWSOptions represents structure for special AWS options. type AWSOptions struct { AWSAccessKey string `json:"aws_access_key"` @@ -382,6 +403,7 @@ type Agent struct { MySQLOptions MySQLOptions `reform:"mysql_options"` PostgreSQLOptions PostgreSQLOptions `reform:"postgresql_options"` ValkeyOptions ValkeyOptions `reform:"valkey_options"` + LogWatcherOptions LogWatcherOptions `reform:"log_watcher_options"` } // BeforeInsert implements reform.BeforeInserter interface. diff --git a/managed/models/agent_model_reform.go b/managed/models/agent_model_reform.go index 9303995b221..21eabd5625e 100644 --- a/managed/models/agent_model_reform.go +++ b/managed/models/agent_model_reform.go @@ -59,6 +59,7 @@ func (v *agentTableType) Columns() []string { "mysql_options", "postgresql_options", "valkey_options", + "log_watcher_options", } } @@ -114,6 +115,7 @@ var AgentTable = &agentTableType{ {Name: "MySQLOptions", Type: "MySQLOptions", Column: "mysql_options"}, {Name: "PostgreSQLOptions", Type: "PostgreSQLOptions", Column: "postgresql_options"}, {Name: "ValkeyOptions", Type: "ValkeyOptions", Column: "valkey_options"}, + {Name: "LogWatcherOptions", Type: "LogWatcherOptions", Column: "log_watcher_options"}, }, PKFieldIndex: 0, }, @@ -122,7 +124,7 @@ var AgentTable = &agentTableType{ // String returns a string representation of this struct or record. func (s Agent) String() string { - res := make([]string, 31) + res := make([]string, 32) res[0] = "AgentID: " + reform.Inspect(s.AgentID, true) res[1] = "AgentType: " + reform.Inspect(s.AgentType, true) res[2] = "RunsOnNodeID: " + reform.Inspect(s.RunsOnNodeID, true) @@ -154,6 +156,7 @@ func (s Agent) String() string { res[28] = "MySQLOptions: " + reform.Inspect(s.MySQLOptions, true) res[29] = "PostgreSQLOptions: " + reform.Inspect(s.PostgreSQLOptions, true) res[30] = "ValkeyOptions: " + reform.Inspect(s.ValkeyOptions, true) + res[31] = "LogWatcherOptions: " + reform.Inspect(s.LogWatcherOptions, true) return strings.Join(res, ", ") } @@ -192,6 +195,7 @@ func (s *Agent) Values() []interface{} { s.MySQLOptions, s.PostgreSQLOptions, s.ValkeyOptions, + s.LogWatcherOptions, } } @@ -230,6 +234,7 @@ func (s *Agent) Pointers() []interface{} { &s.MySQLOptions, &s.PostgreSQLOptions, &s.ValkeyOptions, + &s.LogWatcherOptions, } } diff --git a/managed/models/database.go b/managed/models/database.go index 60a5547bb37..e08fb0b1361 100644 --- a/managed/models/database.go +++ b/managed/models/database.go @@ -1184,6 +1184,13 @@ var databaseSchema = [][]string{ `ALTER TABLE dumps ADD COLUMN encrypted boolean NOT NULL DEFAULT false`, `UPDATE dumps SET encrypted = false`, }, + 119: { + `ALTER TABLE agents ADD COLUMN log_watcher_options JSONB`, + `UPDATE agents SET log_watcher_options = '{}'::jsonb`, + }, + 120: { + `ALTER TABLE alert_rule_templates ADD COLUMN datasource VARCHAR NOT NULL DEFAULT ''`, + }, } // ^^^ Avoid default values in schema definition. ^^^ diff --git a/managed/models/settings.go b/managed/models/settings.go index be03684d785..1b8c1820227 100644 --- a/managed/models/settings.go +++ b/managed/models/settings.go @@ -77,6 +77,10 @@ type Settings struct { DataRetention time.Duration `json:"data_retention"` + // LogsRetention is the duration to keep log and trace data in ClickHouse (pmm.logs / pmm.traces). + // It is independent of DataRetention, which governs metrics/QAN. + LogsRetention time.Duration `json:"logs_retention"` + AWSPartitions []string `json:"aws_partitions"` AWSInstanceChecked bool `json:"aws_instance_checked"` @@ -217,6 +221,10 @@ func (s *Settings) fillDefaults() { s.DataRetention = 30 * 24 * time.Hour //nolint:mnd } + if s.LogsRetention == 0 { + s.LogsRetention = 30 * 24 * time.Hour //nolint:mnd + } + if len(s.AWSPartitions) == 0 { s.AWSPartitions = []string{awsPartitionID} } diff --git a/managed/models/settings_helpers.go b/managed/models/settings_helpers.go index ffe59f53310..4475c6dd462 100644 --- a/managed/models/settings_helpers.go +++ b/managed/models/settings_helpers.go @@ -58,6 +58,8 @@ type ChangeSettingsParams struct { DataRetention time.Duration + LogsRetention time.Duration + // List of AWS partitions to use. If empty - default partitions will be used. If nil - no changes will be made. AWSPartitions []string @@ -169,6 +171,9 @@ func UpdateSettings(q reform.DBTX, params *ChangeSettingsParams) (*Settings, err if params.DataRetention != 0 { settings.DataRetention = params.DataRetention } + if params.LogsRetention != 0 { + settings.LogsRetention = params.LogsRetention + } if params.AWSPartitions != nil { settings.AWSPartitions = deduplicateStrings(params.AWSPartitions) @@ -320,6 +325,19 @@ func ValidateSettings(params *ChangeSettingsParams) error { } } + if params.LogsRetention != 0 { + if _, err := validators.ValidateDataRetention(params.LogsRetention); err != nil { + switch err.(type) { //nolint:errorlint + case validators.DurationNotAllowedError: + return errors.New("logs_retention: should be a natural number of days") + case validators.MinDurationError: + return errors.New("logs_retention: minimal resolution is 24h") + default: + return errors.New("logs_retention: unknown error") + } + } + } + if err := validators.ValidateAWSPartitions(params.AWSPartitions); err != nil { return err } diff --git a/managed/models/template_helpers.go b/managed/models/template_helpers.go index 337eb460ec0..085371dc78f 100644 --- a/managed/models/template_helpers.go +++ b/managed/models/template_helpers.go @@ -145,6 +145,7 @@ func ChangeTemplate(q *reform.Querier, params *ChangeTemplateParams) (*Template, row.For = time.Duration(template.For) row.Severity = Severity(template.Severity) row.Yaml = yaml + row.Datasource = template.Datasource if err = row.SetLabels(template.Labels); err != nil { return nil, err @@ -187,15 +188,16 @@ func ConvertTemplate(template *alert.Template, source Source) (*Template, error) } res := &Template{ - Name: template.Name, - Version: template.Version, - Summary: template.Summary, - Expr: template.Expr, - Params: p, - For: time.Duration(template.For), - Severity: Severity(template.Severity), - Source: source, - Yaml: yaml, + Name: template.Name, + Version: template.Version, + Summary: template.Summary, + Expr: template.Expr, + Params: p, + For: time.Duration(template.For), + Severity: Severity(template.Severity), + Source: source, + Yaml: yaml, + Datasource: template.Datasource, } if err := res.SetLabels(template.Labels); err != nil { diff --git a/managed/models/template_model.go b/managed/models/template_model.go index f0b54551fa0..de515b469f5 100644 --- a/managed/models/template_model.go +++ b/managed/models/template_model.go @@ -42,6 +42,8 @@ type Template struct { Annotations []byte `reform:"annotations"` Source Source `reform:"source"` Yaml string `reform:"yaml"` + // Datasource selects the query backend: empty = metrics (PromQL), "clickhouse" = SQL log/trace alert. + Datasource string `reform:"datasource"` CreatedAt time.Time `reform:"created_at"` UpdatedAt time.Time `reform:"updated_at"` diff --git a/managed/models/template_model_reform.go b/managed/models/template_model_reform.go index 95b23a885ed..83cca2dfb40 100644 --- a/managed/models/template_model_reform.go +++ b/managed/models/template_model_reform.go @@ -39,6 +39,7 @@ func (v *templateTableType) Columns() []string { "annotations", "source", "yaml", + "datasource", "created_at", "updated_at", } @@ -76,6 +77,7 @@ var TemplateTable = &templateTableType{ {Name: "Annotations", Type: "[]uint8", Column: "annotations"}, {Name: "Source", Type: "Source", Column: "source"}, {Name: "Yaml", Type: "string", Column: "yaml"}, + {Name: "Datasource", Type: "string", Column: "datasource"}, {Name: "CreatedAt", Type: "time.Time", Column: "created_at"}, {Name: "UpdatedAt", Type: "time.Time", Column: "updated_at"}, }, @@ -86,7 +88,7 @@ var TemplateTable = &templateTableType{ // String returns a string representation of this struct or record. func (s Template) String() string { - res := make([]string, 13) + res := make([]string, 14) res[0] = "Name: " + reform.Inspect(s.Name, true) res[1] = "Version: " + reform.Inspect(s.Version, true) res[2] = "Summary: " + reform.Inspect(s.Summary, true) @@ -98,8 +100,9 @@ func (s Template) String() string { res[8] = "Annotations: " + reform.Inspect(s.Annotations, true) res[9] = "Source: " + reform.Inspect(s.Source, true) res[10] = "Yaml: " + reform.Inspect(s.Yaml, true) - res[11] = "CreatedAt: " + reform.Inspect(s.CreatedAt, true) - res[12] = "UpdatedAt: " + reform.Inspect(s.UpdatedAt, true) + res[11] = "Datasource: " + reform.Inspect(s.Datasource, true) + res[12] = "CreatedAt: " + reform.Inspect(s.CreatedAt, true) + res[13] = "UpdatedAt: " + reform.Inspect(s.UpdatedAt, true) return strings.Join(res, ", ") } @@ -118,6 +121,7 @@ func (s *Template) Values() []interface{} { s.Annotations, s.Source, s.Yaml, + s.Datasource, s.CreatedAt, s.UpdatedAt, } @@ -138,6 +142,7 @@ func (s *Template) Pointers() []interface{} { &s.Annotations, &s.Source, &s.Yaml, + &s.Datasource, &s.CreatedAt, &s.UpdatedAt, } diff --git a/managed/pi/alert/template.go b/managed/pi/alert/template.go index c09d28e1982..871acd3147f 100644 --- a/managed/pi/alert/template.go +++ b/managed/pi/alert/template.go @@ -102,10 +102,19 @@ type Template struct { Severity common.Severity `yaml:"severity"` // required Labels map[string]string `yaml:"labels,omitempty"` // optional Annotations map[string]string `yaml:"annotations,omitempty"` // optional + // Datasource selects the backend the rule queries: empty (default) means the metrics datasource + // (PromQL via VictoriaMetrics); "clickhouse" means a SQL log/trace alert over the ClickHouse datasource. + Datasource string `yaml:"datasource,omitempty"` // optional // TODO: Tiers field is deprecated and must be removed in PMM v4. Tiers []string `yaml:"tiers,omitempty"` // optional } +// Datasource values for Template.Datasource. +const ( + DatasourceMetrics = "" + DatasourceClickHouse = "clickhouse" +) + // Validate validates template. func (r *Template) Validate() error { var err error @@ -126,6 +135,12 @@ func (r *Template) Validate() error { return errors.New("template expression is empty") } + switch r.Datasource { + case DatasourceMetrics, DatasourceClickHouse: + default: + return fmt.Errorf("unexpected datasource %q", r.Datasource) + } + // Log deprecation warning for tiers field (once per template name) if len(r.Tiers) != 0 { if _, warned := tiersDeprecationWarned.LoadOrStore(r.Name, true); !warned { diff --git a/managed/pi/alert/template_clickhouse_test.go b/managed/pi/alert/template_clickhouse_test.go new file mode 100644 index 00000000000..44fd22307be --- /dev/null +++ b/managed/pi/alert/template_clickhouse_test.go @@ -0,0 +1,50 @@ +// Copyright (C) 2023 Percona LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package alert + +import ( + "os" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/percona/pmm/managed/pi/common" +) + +func TestClickHouseDatasourceTemplate(t *testing.T) { + t.Run("built-in mysql_log_down parses with clickhouse datasource", func(t *testing.T) { + f, err := os.Open("../../data/alerting-templates/mysql_log_down.yml") + require.NoError(t, err) + t.Cleanup(func() { _ = f.Close() }) + + templates, err := Parse(f, &ParseParams{DisallowUnknownFields: true, DisallowInvalidTemplates: true}) + require.NoError(t, err) + require.Len(t, templates, 1) + assert.Equal(t, "pmm_mysql_log_down", templates[0].Name) + assert.Equal(t, DatasourceClickHouse, templates[0].Datasource) + }) + + t.Run("invalid datasource is rejected", func(t *testing.T) { + tmpl := Template{Version: 1, Name: "t", Summary: "s", Expr: "e", Datasource: "loki"} + require.Error(t, tmpl.Validate()) + }) + + t.Run("empty datasource is accepted", func(t *testing.T) { + tmpl := Template{Version: 1, Name: "t", Summary: "s", Expr: "e", Severity: common.Critical} + require.NoError(t, tmpl.Validate()) + }) +} diff --git a/managed/services/agents/dblogwatcher.go b/managed/services/agents/dblogwatcher.go new file mode 100644 index 00000000000..1ab050a42e8 --- /dev/null +++ b/managed/services/agents/dblogwatcher.go @@ -0,0 +1,56 @@ +// Copyright (C) 2023 Percona LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package agents + +import ( + agentv1 "github.com/percona/pmm/api/agent/v1" + inventoryv1 "github.com/percona/pmm/api/inventory/v1" + "github.com/percona/pmm/managed/models" +) + +// dbLogWatcherAgentConfig returns the desired configuration of the database log-watcher built-in agent. +func dbLogWatcherAgentConfig(service *models.Service, agent *models.Agent) *agentv1.SetStateRequest_BuiltinAgent { + watched := make([]*inventoryv1.WatchedLog, 0, len(agent.LogWatcherOptions.Files)) + for _, f := range agent.LogWatcherOptions.Files { + watched = append(watched, &inventoryv1.WatchedLog{Path: f.Path, Type: f.Type}) + } + + return &agentv1.SetStateRequest_BuiltinAgent{ + Type: inventoryv1.AgentType_AGENT_TYPE_DB_LOG_WATCHER_AGENT, + ServiceId: service.ServiceID, + ServiceName: service.ServiceName, + DbSystem: serviceTypeToDBSystem(service.ServiceType), + WatchedLogs: watched, + } +} + +// serviceTypeToDBSystem maps a PMM service type to the OpenTelemetry db.system value. +func serviceTypeToDBSystem(t models.ServiceType) string { + switch t { + case models.MySQLServiceType: + return "mysql" + case models.PostgreSQLServiceType: + return "postgresql" + case models.MongoDBServiceType: + return "mongodb" + case models.ValkeyServiceType: + return "valkey" + case models.ProxySQLServiceType, models.HAProxyServiceType, models.ExternalServiceType: + return "" + default: + return "" + } +} diff --git a/managed/services/agents/state.go b/managed/services/agents/state.go index 886cb0a2777..2b70f028c29 100644 --- a/managed/services/agents/state.go +++ b/managed/services/agents/state.go @@ -243,7 +243,7 @@ func (u *StateUpdater) sendSetStateRequest(ctx context.Context, agent *pmmAgentI models.ValkeyExporterType, models.QANMySQLPerfSchemaAgentType, models.QANMySQLSlowlogAgentType, models.QANMongoDBProfilerAgentType, models.QANMongoDBMongologAgentType, models.QANPostgreSQLPgStatementsAgentType, models.QANPostgreSQLPgStatMonitorAgentType, - models.RTAMongoDBAgentType: + models.RTAMongoDBAgentType, models.DBLogWatcherAgentType: service, err := models.FindServiceByID(u.db.Querier, pointer.GetString(row.ServiceID)) if err != nil { return err @@ -286,6 +286,8 @@ func (u *StateUpdater) sendSetStateRequest(ctx context.Context, agent *pmmAgentI builtinAgents[row.AgentID] = qanPostgreSQLPgStatMonitorAgentConfig(service, row, pmmAgentVersion) case models.RTAMongoDBAgentType: builtinAgents[row.AgentID] = rtaMongoDBAgentConfig(service, row, pmmAgentVersion) + case models.DBLogWatcherAgentType: + builtinAgents[row.AgentID] = dbLogWatcherAgentConfig(service, row) } default: diff --git a/managed/services/alert_rule.go b/managed/services/alert_rule.go index d15690771c5..6ffc4e91461 100644 --- a/managed/services/alert_rule.go +++ b/managed/services/alert_rule.go @@ -34,8 +34,38 @@ type RelativeTimeRange struct { // Model represents grafana query model. type Model struct { RefID string `json:"refId"` - Expr string `json:"expr"` - Instant bool `json:"instant"` + Expr string `json:"expr,omitempty"` + Instant bool `json:"instant,omitempty"` + + // Datasource reference (used by SQL and expression nodes). + Datasource *ModelDatasource `json:"datasource,omitempty"` + + // ClickHouse / SQL datasource query. + RawSQL string `json:"rawSql,omitempty"` + QueryType string `json:"queryType,omitempty"` + + // Server-side expression nodes (reduce, threshold). + Type string `json:"type,omitempty"` + Expression string `json:"expression,omitempty"` + Reducer string `json:"reducer,omitempty"` + Conditions []ModelCondition `json:"conditions,omitempty"` +} + +// ModelDatasource references a datasource within a query/expression model. +type ModelDatasource struct { + Type string `json:"type"` + UID string `json:"uid"` +} + +// ModelCondition represents a server-side expression threshold condition. +type ModelCondition struct { + Evaluator ModelEvaluator `json:"evaluator"` +} + +// ModelEvaluator represents a threshold evaluator (e.g. "gt"). +type ModelEvaluator struct { + Type string `json:"type"` + Params []float64 `json:"params"` } // Data represents grafana API alert rule data. diff --git a/managed/services/alerting/deps.go b/managed/services/alerting/deps.go index 30c5d8abde3..3e9968d74c7 100644 --- a/managed/services/alerting/deps.go +++ b/managed/services/alerting/deps.go @@ -26,5 +26,6 @@ import ( type grafanaClient interface { CreateAlertRule(ctx context.Context, folderUID, groupName, interval string, rule *services.Rule) error GetDatasourceUIDByID(ctx context.Context, id int64) (string, error) + GetDatasourceUIDByName(ctx context.Context, name string) (string, error) GetFolderByUID(ctx context.Context, uid string) (*gapi.Folder, error) } diff --git a/managed/services/alerting/mock_grafana_client_test.go b/managed/services/alerting/mock_grafana_client_test.go index b0af8052073..9de5dfbf093 100644 --- a/managed/services/alerting/mock_grafana_client_test.go +++ b/managed/services/alerting/mock_grafana_client_test.go @@ -62,6 +62,34 @@ func (_m *mockGrafanaClient) GetDatasourceUIDByID(ctx context.Context, id int64) return r0, r1 } +// GetDatasourceUIDByName provides a mock function with given fields: ctx, name +func (_m *mockGrafanaClient) GetDatasourceUIDByName(ctx context.Context, name string) (string, error) { + ret := _m.Called(ctx, name) + + if len(ret) == 0 { + panic("no return value specified for GetDatasourceUIDByName") + } + + var r0 string + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string) (string, error)); ok { + return rf(ctx, name) + } + if rf, ok := ret.Get(0).(func(context.Context, string) string); ok { + r0 = rf(ctx, name) + } else { + r0 = ret.Get(0).(string) //nolint:forcetypeassert + } + + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, name) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // GetFolderByUID provides a mock function with given fields: ctx, uid func (_m *mockGrafanaClient) GetFolderByUID(ctx context.Context, uid string) (*gapi.Folder, error) { ret := _m.Called(ctx, uid) diff --git a/managed/services/alerting/service.go b/managed/services/alerting/service.go index 616a1f6813a..43deb4634c7 100644 --- a/managed/services/alerting/service.go +++ b/managed/services/alerting/service.go @@ -640,14 +640,17 @@ func (s *Service) CreateRule(ctx context.Context, req *alerting.CreateRuleReques return nil, errors.Wrap(err, "failed to fill rule expression with parameters") } - for _, filter := range req.Filters { - switch filter.Type { - case alerting.FilterType_FILTER_TYPE_MATCH: - expr = fmt.Sprintf(`label_match(%s, "%s", "%s")`, expr, filter.Label, filter.Regexp) - case alerting.FilterType_FILTER_TYPE_MISMATCH: - expr = fmt.Sprintf(`label_mismatch(%s, "%s", "%s")`, expr, filter.Label, filter.Regexp) - default: - return nil, errors.Errorf("unknown filter type: %T", filter) + // Label filters apply to PromQL/metrics rules only. + if sourceTemplate.Datasource == alert.DatasourceMetrics { + for _, filter := range req.Filters { + switch filter.Type { + case alerting.FilterType_FILTER_TYPE_MATCH: + expr = fmt.Sprintf(`label_match(%s, "%s", "%s")`, expr, filter.Label, filter.Regexp) + case alerting.FilterType_FILTER_TYPE_MISMATCH: + expr = fmt.Sprintf(`label_mismatch(%s, "%s", "%s")`, expr, filter.Label, filter.Regexp) + default: + return nil, errors.Errorf("unknown filter type: %T", filter) + } } } @@ -683,8 +686,14 @@ func (s *Service) CreateRule(ctx context.Context, req *alerting.CreateRuleReques labels["severity"] = common.Severity(req.Severity).String() labels["template_name"] = req.TemplateName - rule := services.Rule{ - GrafanaAlert: services.GrafanaAlert{ + var grafanaAlert services.GrafanaAlert + if sourceTemplate.Datasource == alert.DatasourceClickHouse { + grafanaAlert, err = s.clickhouseGrafanaAlert(ctx, req.Name, expr, paramsValues) + if err != nil { + return nil, err + } + } else { + grafanaAlert = services.GrafanaAlert{ Title: req.Name, Condition: "A", NoDataState: "OK", @@ -702,10 +711,14 @@ func (s *Service) CreateRule(ctx context.Context, req *alerting.CreateRuleReques }, }, }, - }, - For: forDuration.String(), - Annotations: annotations, - Labels: labels, + } + } + + rule := services.Rule{ + GrafanaAlert: grafanaAlert, + For: forDuration.String(), + Annotations: annotations, + Labels: labels, } // TODO: align it with grafanas default value: https://grafana.com/docs/grafana/v9.0/setup-grafana/configure-grafana/#min_interval @@ -722,6 +735,73 @@ func (s *Service) CreateRule(ctx context.Context, req *alerting.CreateRuleReques return &alerting.CreateRuleResponse{}, nil } +const ( + clickhouseDatasourceName = "ClickHouseLogs" + clickhouseDatasourceType = "grafana-clickhouse-datasource" + exprDatasourceUID = "__expr__" + // logAlertTimeRange is the relative time window (seconds) over which the log query is evaluated. + logAlertTimeRange = 300 +) + +// clickhouseGrafanaAlert builds a 3-node Grafana rule for a ClickHouse log/trace alert: +// A = SQL query, B = reduce(last), C = threshold(B > threshold). The "threshold" template parameter, +// if present, sets the threshold; otherwise it defaults to 0 (fire when the query returns any value). +func (s *Service) clickhouseGrafanaAlert(ctx context.Context, title, rawSQL string, params AlertExprParamsValues) (services.GrafanaAlert, error) { + chUID, err := s.grafanaClient.GetDatasourceUIDByName(ctx, clickhouseDatasourceName) + if err != nil { + return services.GrafanaAlert{}, errors.Wrap(err, "failed to resolve ClickHouse datasource") + } + + var threshold float64 + if v, ok := params.AsStringMap()["threshold"]; ok { + threshold, _ = strconv.ParseFloat(v, 64) //nolint:errcheck + } + + return services.GrafanaAlert{ + Title: title, + Condition: "C", + NoDataState: "OK", + ExecErrState: "Alerting", + Data: []services.Data{ + { + RefID: "A", + DatasourceUID: chUID, + RelativeTimeRange: services.RelativeTimeRange{From: logAlertTimeRange, To: 0}, + Model: services.Model{ + RefID: "A", + Datasource: &services.ModelDatasource{Type: clickhouseDatasourceType, UID: chUID}, + RawSQL: rawSQL, + QueryType: "table", + }, + }, + { + RefID: "B", + DatasourceUID: exprDatasourceUID, + Model: services.Model{ + RefID: "B", + Datasource: &services.ModelDatasource{Type: exprDatasourceUID, UID: exprDatasourceUID}, + Type: "reduce", + Expression: "A", + Reducer: "last", + }, + }, + { + RefID: "C", + DatasourceUID: exprDatasourceUID, + Model: services.Model{ + RefID: "C", + Datasource: &services.ModelDatasource{Type: exprDatasourceUID, UID: exprDatasourceUID}, + Type: "threshold", + Expression: "B", + Conditions: []services.ModelCondition{ + {Evaluator: services.ModelEvaluator{Type: "gt", Params: []float64{threshold}}}, + }, + }, + }, + }, + }, nil +} + func convertParamsValuesToModel(params []*alerting.ParamValue) (AlertExprParamsValues, error) { ruleParams := make(AlertExprParamsValues, len(params)) for i, param := range params { diff --git a/managed/services/clickhouse/clickhouse.go b/managed/services/clickhouse/clickhouse.go new file mode 100644 index 00000000000..e03cf6fb69e --- /dev/null +++ b/managed/services/clickhouse/clickhouse.go @@ -0,0 +1,223 @@ +// Copyright (C) 2023 Percona LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Package clickhouse owns the lifecycle (schema + retention TTL) of the OpenTelemetry logs and traces +// tables in ClickHouse. It is deliberately part of pmm-managed and independent of qan-api2: qan-api2 +// is the Query Analytics component and must not be aware of logging or tracing. +package clickhouse + +import ( + "bytes" + "context" + "database/sql" + "embed" + "fmt" + "io" + "net/url" + "strconv" + "text/template" + "time" + + "github.com/golang-migrate/migrate/v4" + _ "github.com/golang-migrate/migrate/v4/database/clickhouse" // register golang-migrate clickhouse driver + bindata "github.com/golang-migrate/migrate/v4/source/go_bindata" + "github.com/pkg/errors" + "github.com/sirupsen/logrus" + + "github.com/percona/pmm/managed/utils/envvars" +) + +//go:embed migrations/sql/*.sql +var migrationsFS embed.FS + +const ( + migrationsTable = "logs_schema_migrations" + engineSimple = "MergeTree" + engineCluster = "ReplicatedMergeTree" + migrationsEngineCluster = "ReplicatedMergeTree ORDER BY version" + + migrateRetryInterval = 5 * time.Second + migrateMaxAttempts = 24 // ~2 minutes, enough to cover ClickHouse warm-up. +) + +// errNotReady marks a transient failure (ClickHouse unreachable) that is worth retrying, as opposed to +// a permanent migration error (e.g. malformed SQL) that retrying cannot fix. +var errNotReady = errors.New("clickhouse is not ready") + +// Service owns the schema and TTL of the pmm.logs / pmm.traces tables. +type Service struct { + db *sql.DB + migrateDSN string + database string + isCluster bool + l *logrus.Entry +} + +// New returns a ClickHouse logs/traces lifecycle service. db is reused for DDL (TTL); golang-migrate +// opens its own connection from a DSN built out of the same connection parameters. +func New(db *sql.DB, addr, database, user, password string) *Service { + isCluster, _ := strconv.ParseBool(envvars.GetEnv("PMM_CLICKHOUSE_IS_CLUSTER", "false")) + dsn := url.URL{ + Scheme: "clickhouse", + User: url.UserPassword(user, password), + Host: addr, + Path: database, + } + return &Service{ + db: db, + migrateDSN: dsn.String(), + database: database, + isCluster: isCluster, + l: logrus.WithField("component", "clickhouse"), + } +} + +// Bootstrap brings the logs/traces schema up to date. It retries while ClickHouse is unreachable +// (bounded by migrateMaxAttempts) but fails fast on a permanent migration error, and returns when the +// schema is up to date, when it gives up, or when ctx is cancelled. +func (s *Service) Bootstrap(ctx context.Context) error { + for attempt := 1; ; attempt++ { + err := s.Migrate() + switch { + case err == nil: + s.l.Info("logs/traces schema is up to date") + return nil + case !errors.Is(err, errNotReady): + return errors.Wrap(err, "logs/traces migrations failed") + case attempt >= migrateMaxAttempts: + return errors.Wrapf(err, "ClickHouse still not ready after %d attempts", attempt) + } + + s.l.Warnf("ClickHouse not ready (attempt %d/%d), retrying in %s: %s", attempt, migrateMaxAttempts, migrateRetryInterval, err) + select { + case <-ctx.Done(): + return nil + case <-time.After(migrateRetryInterval): + } + } +} + +// Migrate applies the embedded logs/traces migrations using a dedicated migrations table so it never +// collides with qan-api2's schema_migrations on the same database. A connect-time failure is returned +// wrapped in errNotReady (transient); a failed migration is recovered from a dirty state once, then +// returned as a permanent error. +func (s *Service) Migrate() error { + data := map[string]any{"engine": s.engine()} + + entries, err := migrationsFS.ReadDir("migrations/sql") + if err != nil { + return errors.WithStack(err) + } + names := make([]string, 0, len(entries)) + for _, e := range entries { + names = append(names, e.Name()) + } + + res := bindata.Resource(names, func(name string) ([]byte, error) { + b, err := migrationsFS.ReadFile("migrations/sql/" + name) + if err != nil { + return nil, err + } + tmpl, err := template.New(name).Parse(string(b)) + if err != nil { + return nil, err + } + var buf bytes.Buffer + if err := tmpl.Execute(&buf, data); err != nil { + return nil, err + } + return buf.Bytes(), nil + }) + + src, err := bindata.WithInstance(res) + if err != nil { + return errors.WithStack(err) + } + + dsn, err := s.dsnForMigrate() + if err != nil { + return err + } + + // The clickhouse migrate driver connects in Open, so a failure here means ClickHouse is not yet + // reachable — transient, worth retrying. + m, err := migrate.NewWithSourceInstance("go-bindata", src, dsn) + if err != nil { + return fmt.Errorf("%w: %w", errNotReady, err) + } + defer m.Close() //nolint:errcheck + + err = m.Up() + if err == nil || errors.Is(err, migrate.ErrNoChange) { + return nil + } + + // Recover from a dirty migration state by forcing back one version and retrying (PMM-14305). + var errDirty *migrate.ErrDirty + if errors.As(err, &errDirty) { + s.l.Warnf("Migration %d left the schema dirty, attempting recovery...", errDirty.Version) + ver := errDirty.Version - 1 + if ver == 0 { + ver = -1 // golang-migrate's "no migration applied" sentinel. + } + if ferr := m.Force(ver); ferr != nil { + return errors.Wrapf(ferr, "can't force migration %d", ver) + } + if uerr := m.Up(); uerr != nil && !errors.Is(uerr, migrate.ErrNoChange) && !errors.Is(uerr, io.EOF) { + return errors.WithStack(uerr) + } + return nil + } + + return errors.WithStack(err) +} + +// ApplyTTL sets the retention TTL on the logs and traces tables. In cluster mode the DDL is replicated +// automatically by the Replicated `pmm` database engine, so no ON CLUSTER clause is needed. +func (s *Service) ApplyTTL(retention time.Duration) error { + days := max(int(retention.Hours())/24, 1) //nolint:mnd + stmts := []string{ + fmt.Sprintf("ALTER TABLE %s.logs MODIFY TTL TimestampTime + INTERVAL %d DAY", s.database, days), + fmt.Sprintf("ALTER TABLE %s.traces MODIFY TTL toDateTime(Timestamp) + INTERVAL %d DAY", s.database, days), + } + for _, stmt := range stmts { + if _, err := s.db.Exec(stmt); err != nil { + return errors.Wrapf(err, "failed to apply TTL (%q)", stmt) + } + s.l.Infof("Applied retention TTL: %s", stmt) + } + return nil +} + +func (s *Service) engine() string { + if s.isCluster { + return engineCluster + } + return engineSimple +} + +func (s *Service) dsnForMigrate() (string, error) { + u, err := url.Parse(s.migrateDSN) + if err != nil { + return "", errors.WithStack(err) + } + q := u.Query() + q.Set("x-migrations-table", migrationsTable) + if s.isCluster { + q.Set("x-migrations-table-engine", migrationsEngineCluster) + } + u.RawQuery = q.Encode() + return u.String(), nil +} diff --git a/managed/services/clickhouse/migrations/sql/1_logs.down.sql b/managed/services/clickhouse/migrations/sql/1_logs.down.sql new file mode 100644 index 00000000000..7bd492b80cf --- /dev/null +++ b/managed/services/clickhouse/migrations/sql/1_logs.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS logs; diff --git a/managed/services/clickhouse/migrations/sql/1_logs.up.sql b/managed/services/clickhouse/migrations/sql/1_logs.up.sql new file mode 100644 index 00000000000..88b78f27a90 --- /dev/null +++ b/managed/services/clickhouse/migrations/sql/1_logs.up.sql @@ -0,0 +1,33 @@ +-- OpenTelemetry log records, written by the otelcol-contrib clickhouseexporter (create_schema=false). +-- Column layout MUST match the exporter version shipped in the PMM Server image; bump together. +-- TTL is applied separately via ALTER TABLE ... MODIFY TTL driven by the Logs retention setting. +CREATE TABLE IF NOT EXISTS logs ( + `Timestamp` DateTime64(9) CODEC(Delta(8), ZSTD(1)), + `TimestampTime` DateTime DEFAULT toDateTime(Timestamp), + `TraceId` String CODEC(ZSTD(1)), + `SpanId` String CODEC(ZSTD(1)), + `TraceFlags` UInt8, + `SeverityText` LowCardinality(String) CODEC(ZSTD(1)), + `SeverityNumber` UInt8, + `ServiceName` LowCardinality(String) CODEC(ZSTD(1)), + `Body` String CODEC(ZSTD(1)), + `ResourceSchemaUrl` LowCardinality(String) CODEC(ZSTD(1)), + `ResourceAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), + `ScopeSchemaUrl` LowCardinality(String) CODEC(ZSTD(1)), + `ScopeName` String CODEC(ZSTD(1)), + `ScopeVersion` LowCardinality(String) CODEC(ZSTD(1)), + `ScopeAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), + `LogAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), + INDEX idx_trace_id TraceId TYPE bloom_filter(0.001) GRANULARITY 1, + INDEX idx_res_attr_key mapKeys(ResourceAttributes) TYPE bloom_filter(0.01) GRANULARITY 1, + INDEX idx_res_attr_value mapValues(ResourceAttributes) TYPE bloom_filter(0.01) GRANULARITY 1, + INDEX idx_scope_attr_key mapKeys(ScopeAttributes) TYPE bloom_filter(0.01) GRANULARITY 1, + INDEX idx_scope_attr_value mapValues(ScopeAttributes) TYPE bloom_filter(0.01) GRANULARITY 1, + INDEX idx_log_attr_key mapKeys(LogAttributes) TYPE bloom_filter(0.01) GRANULARITY 1, + INDEX idx_log_attr_value mapValues(LogAttributes) TYPE bloom_filter(0.01) GRANULARITY 1, + INDEX idx_body Body TYPE tokenbf_v1(32768, 3, 0) GRANULARITY 8 +) ENGINE = {{ .engine }} +PARTITION BY toDate(TimestampTime) +PRIMARY KEY (ServiceName, TimestampTime) +ORDER BY (ServiceName, TimestampTime, Timestamp) +SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1; diff --git a/managed/services/clickhouse/migrations/sql/2_traces.down.sql b/managed/services/clickhouse/migrations/sql/2_traces.down.sql new file mode 100644 index 00000000000..a2ecbd8ab48 --- /dev/null +++ b/managed/services/clickhouse/migrations/sql/2_traces.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS traces; diff --git a/managed/services/clickhouse/migrations/sql/2_traces.up.sql b/managed/services/clickhouse/migrations/sql/2_traces.up.sql new file mode 100644 index 00000000000..9d275a988ef --- /dev/null +++ b/managed/services/clickhouse/migrations/sql/2_traces.up.sql @@ -0,0 +1,36 @@ +-- OpenTelemetry trace spans, written by the otelcol-contrib clickhouseexporter (create_schema=false). +-- Column layout MUST match the exporter version shipped in the PMM Server image; bump together. +-- TTL is applied separately via ALTER TABLE ... MODIFY TTL driven by the Logs retention setting. +CREATE TABLE IF NOT EXISTS traces ( + `Timestamp` DateTime64(9) CODEC(Delta(8), ZSTD(1)), + `TraceId` String CODEC(ZSTD(1)), + `SpanId` String CODEC(ZSTD(1)), + `ParentSpanId` String CODEC(ZSTD(1)), + `TraceState` String CODEC(ZSTD(1)), + `SpanName` LowCardinality(String) CODEC(ZSTD(1)), + `SpanKind` LowCardinality(String) CODEC(ZSTD(1)), + `ServiceName` LowCardinality(String) CODEC(ZSTD(1)), + `ResourceAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), + `ScopeName` String CODEC(ZSTD(1)), + `ScopeVersion` String CODEC(ZSTD(1)), + `SpanAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)), + `Duration` UInt64 CODEC(ZSTD(1)), + `StatusCode` LowCardinality(String) CODEC(ZSTD(1)), + `StatusMessage` String CODEC(ZSTD(1)), + `Events.Timestamp` Array(DateTime64(9)) CODEC(ZSTD(1)), + `Events.Name` Array(LowCardinality(String)) CODEC(ZSTD(1)), + `Events.Attributes` Array(Map(LowCardinality(String), String)) CODEC(ZSTD(1)), + `Links.TraceId` Array(String) CODEC(ZSTD(1)), + `Links.SpanId` Array(String) CODEC(ZSTD(1)), + `Links.TraceState` Array(String) CODEC(ZSTD(1)), + `Links.Attributes` Array(Map(LowCardinality(String), String)) CODEC(ZSTD(1)), + INDEX idx_trace_id TraceId TYPE bloom_filter(0.001) GRANULARITY 1, + INDEX idx_res_attr_key mapKeys(ResourceAttributes) TYPE bloom_filter(0.01) GRANULARITY 1, + INDEX idx_res_attr_value mapValues(ResourceAttributes) TYPE bloom_filter(0.01) GRANULARITY 1, + INDEX idx_span_attr_key mapKeys(SpanAttributes) TYPE bloom_filter(0.01) GRANULARITY 1, + INDEX idx_span_attr_value mapValues(SpanAttributes) TYPE bloom_filter(0.01) GRANULARITY 1, + INDEX idx_duration Duration TYPE minmax GRANULARITY 1 +) ENGINE = {{ .engine }} +PARTITION BY toDate(Timestamp) +ORDER BY (ServiceName, SpanName, toDateTime(Timestamp)) +SETTINGS index_granularity = 8192, ttl_only_drop_parts = 1; diff --git a/managed/services/converters.go b/managed/services/converters.go index 886493122a0..d17504aaf11 100644 --- a/managed/services/converters.go +++ b/managed/services/converters.go @@ -607,6 +607,23 @@ func ToAPIAgent(q *reform.Querier, agent *models.Agent) (inventoryv1.Agent, erro RtaOptions: ToAPIRTAOptions(&agent.RTAOptions), }, nil + case models.DBLogWatcherAgentType: + watchedLogs := make([]*inventoryv1.WatchedLog, 0, len(agent.LogWatcherOptions.Files)) + for _, f := range agent.LogWatcherOptions.Files { + watchedLogs = append(watchedLogs, &inventoryv1.WatchedLog{Path: f.Path, Type: f.Type}) + } + return &inventoryv1.DBLogWatcherAgent{ + AgentId: agent.AgentID, + PmmAgentId: pointer.GetString(agent.PMMAgentID), + ServiceId: serviceID, + Disabled: agent.Disabled, + Status: inventoryv1.AgentStatus(inventoryv1.AgentStatus_value[agent.Status]), + CustomLabels: labels, + ProcessExecPath: processExecPath, + LogLevel: inventoryv1.LogLevelAPIValue(agent.LogLevel), + WatchedLogs: watchedLogs, + }, nil + default: panic(fmt.Errorf("cannot convert unknown agent type %s", agent.AgentType)) } diff --git a/managed/services/grafana/client.go b/managed/services/grafana/client.go index 5edc3808444..4850e2edfaa 100644 --- a/managed/services/grafana/client.go +++ b/managed/services/grafana/client.go @@ -781,6 +781,20 @@ func (c *Client) GetDatasourceUIDByID(ctx context.Context, id int64) (string, er return ds.UID, nil } +// GetDatasourceUIDByName returns the UID of the datasource with the given name (e.g. "ClickHouse"). +func (c *Client) GetDatasourceUIDByName(ctx context.Context, name string) (string, error) { + grafanaClient, err := c.createGrafanaClient(ctx) + if err != nil { + return "", errors.Wrap(err, "failed to create grafana client") + } + + ds, err := grafanaClient.DataSourceByName(name) + if err != nil { + return "", err + } + return ds.UID, nil +} + // CreateFolder creates grafana folder. func (c *Client) CreateFolder(ctx context.Context, title string) (*gapi.Folder, error) { grafanaClient, err := c.createGrafanaClient(ctx) diff --git a/managed/services/inventory/grpc/agents_server.go b/managed/services/inventory/grpc/agents_server.go index 1ee54b62553..cc754a212ed 100644 --- a/managed/services/inventory/grpc/agents_server.go +++ b/managed/services/inventory/grpc/agents_server.go @@ -121,6 +121,8 @@ func (s *agentsServer) ListAgents(ctx context.Context, req *inventoryv1.ListAgen res.NomadAgent = append(res.NomadAgent, agent) case *inventoryv1.RTAMongoDBAgent: res.RtaMongodbAgent = append(res.RtaMongodbAgent, agent) + case *inventoryv1.DBLogWatcherAgent: + res.DbLogWatcherAgent = append(res.DbLogWatcherAgent, agent) default: panic(fmt.Errorf("unhandled inventory Agent type %T", agent)) } @@ -175,6 +177,8 @@ func (s *agentsServer) GetAgent(ctx context.Context, req *inventoryv1.GetAgentRe res.Agent = &inventoryv1.GetAgentResponse_NomadAgent{NomadAgent: agent} case *inventoryv1.RTAMongoDBAgent: res.Agent = &inventoryv1.GetAgentResponse_RtaMongodbAgent{RtaMongodbAgent: agent} + case *inventoryv1.DBLogWatcherAgent: + res.Agent = &inventoryv1.GetAgentResponse_DbLogWatcherAgent{DbLogWatcherAgent: agent} default: panic(fmt.Errorf("unhandled inventory Agent type %T", agent)) } diff --git a/managed/services/logship/service.go b/managed/services/logship/service.go new file mode 100644 index 00000000000..174ebd2fbf3 --- /dev/null +++ b/managed/services/logship/service.go @@ -0,0 +1,208 @@ +// Copyright (C) 2023 Percona LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +// Package logship receives client and database logs streamed from PMM Clients over the existing agent +// channel and forwards them to the local OpenTelemetry Collector (OTLP/HTTP) for storage in ClickHouse. +package logship + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "io" + "net/http" + "strconv" + "time" + + "github.com/sirupsen/logrus" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + "gopkg.in/reform.v1" + + agentv1 "github.com/percona/pmm/api/agent/v1" + logshipv1 "github.com/percona/pmm/api/logship/v1" + "github.com/percona/pmm/managed/models" + "github.com/percona/pmm/utils/logger" +) + +// DefaultCollectorLogsEndpoint is the local OpenTelemetry Collector OTLP/HTTP logs endpoint. +const DefaultCollectorLogsEndpoint = "http://127.0.0.1:4318/v1/logs" + +const exportTimeout = 10 * time.Second + +// Service implements the LogShipService gRPC server. +type Service struct { + db *reform.DB + endpoint string + client *http.Client + l *logrus.Entry + + logshipv1.UnimplementedLogShipServiceServer +} + +// New creates a new log-shipping service forwarding to the given OTLP/HTTP logs endpoint. +func New(db *reform.DB, endpoint string) *Service { + return &Service{ + db: db, + endpoint: endpoint, + client: &http.Client{Timeout: exportTimeout}, + l: logrus.WithField("component", "logship"), + } +} + +// Ship handles the incoming stream of client/database log records (gRPC handler). +func (s *Service) Ship(stream grpc.ClientStreamingServer[logshipv1.ShipRequest, logshipv1.ShipResponse]) error { + streamCtx := stream.Context() + l := logger.Get(streamCtx) + + agentMD, err := agentv1.ReceiveAgentConnectMetadata(stream) + if err != nil { + l.Warnf("Disconnecting client: authentication failed: %v", err) + return status.Error(codes.Unauthenticated, "Failed to receive agent metadata") + } + + agent, err := models.FindAgentByID(s.db.Querier, agentMD.ID) + if err != nil { + l.Warnf("Disconnecting client: agent validation failed: %v", err) + return status.Error(codes.InvalidArgument, "Invalid Agent ID: "+agentMD.ID) + } + if agent.AgentType != models.PMMAgentType { + return status.Errorf(codes.InvalidArgument, "Agent with ID %s is not a pmm-agent", agentMD.ID) + } + + for { + select { + case <-streamCtx.Done(): + return status.Error(codes.Canceled, "client disconnected") + default: + } + + msg, err := stream.Recv() + if err != nil { + if errors.Is(err, io.EOF) { + return stream.SendAndClose(&logshipv1.ShipResponse{}) + } + return err + } + + if len(msg.Records) == 0 { + continue // health ping or empty batch + } + + // Log shipping is best-effort: on a forwarding error we drop the batch and keep the stream open + // rather than disconnecting the agent, since the collector outage is usually transient. + if err := s.export(streamCtx, agentMD.ID, msg); err != nil { + s.l.Warnf("Failed to forward %d log records to the collector: %s", len(msg.Records), err) + } + } +} + +// export converts a ShipRequest to OTLP/HTTP JSON and posts it to the local collector. +func (s *Service) export(ctx context.Context, agentID string, msg *logshipv1.ShipRequest) error { + resourceAttrs := make([]otlpKeyValue, 0, len(msg.ResourceAttributes)+2) //nolint:mnd + resourceAttrs = append(resourceAttrs, stringAttr("service.name", msg.ServiceName), stringAttr("pmm.agent_id", agentID)) + for k, v := range msg.ResourceAttributes { + resourceAttrs = append(resourceAttrs, stringAttr(k, v)) + } + + records := make([]otlpLogRecord, 0, len(msg.Records)) + for _, r := range msg.Records { + rec := otlpLogRecord{ + SeverityText: r.SeverityText, + Body: otlpAnyValue{StringValue: r.Body}, + } + if r.Time != nil { + rec.TimeUnixNano = strconv.FormatInt(r.Time.AsTime().UnixNano(), 10) + } + for k, v := range r.Attributes { + rec.Attributes = append(rec.Attributes, stringAttr(k, v)) + } + records = append(records, rec) + } + + payload := otlpLogsData{ + ResourceLogs: []otlpResourceLogs{{ + Resource: otlpResource{Attributes: resourceAttrs}, + ScopeLogs: []otlpScopeLogs{{LogRecords: records}}, + }}, + } + + body, err := json.Marshal(payload) + if err != nil { + return err + } + + req, err := http.NewRequestWithContext(ctx, http.MethodPost, s.endpoint, bytes.NewReader(body)) + if err != nil { + return err + } + req.Header.Set("Content-Type", "application/json") + + resp, err := s.client.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() //nolint:errcheck + _, _ = io.Copy(io.Discard, resp.Body) + + if resp.StatusCode/100 != 2 { //nolint:mnd + return errors.New("collector returned status " + resp.Status) + } + return nil +} + +// Minimal OTLP/HTTP JSON encoding for logs (subset of opentelemetry.proto.collector.logs.v1). + +type otlpLogsData struct { + ResourceLogs []otlpResourceLogs `json:"resourceLogs"` +} + +type otlpResourceLogs struct { + Resource otlpResource `json:"resource"` + ScopeLogs []otlpScopeLogs `json:"scopeLogs"` +} + +type otlpResource struct { + Attributes []otlpKeyValue `json:"attributes,omitempty"` +} + +type otlpScopeLogs struct { + LogRecords []otlpLogRecord `json:"logRecords"` +} + +type otlpLogRecord struct { + TimeUnixNano string `json:"timeUnixNano,omitempty"` + SeverityText string `json:"severityText,omitempty"` + Body otlpAnyValue `json:"body"` + Attributes []otlpKeyValue `json:"attributes,omitempty"` +} + +type otlpKeyValue struct { + Key string `json:"key"` + Value otlpAnyValue `json:"value"` +} + +type otlpAnyValue struct { + StringValue string `json:"stringValue"` +} + +func stringAttr(key, value string) otlpKeyValue { + return otlpKeyValue{Key: key, Value: otlpAnyValue{StringValue: value}} +} + +// check interface. +var _ logshipv1.LogShipServiceServer = (*Service)(nil) diff --git a/managed/services/management/mysql.go b/managed/services/management/mysql.go index c4d8a88cad7..8d5b8f1b4b1 100644 --- a/managed/services/management/mysql.go +++ b/managed/services/management/mysql.go @@ -186,6 +186,21 @@ func (s *ManagementService) addMySQL(ctx context.Context, req *managementv1.AddM mysql.QanMysqlSlowlog = agent.(*inventoryv1.QANMySQLSlowlogAgent) //nolint:forcetypeassert } + if req.WatchLogs && len(req.LogFiles) > 0 { + files := make([]models.WatchedLogFile, 0, len(req.LogFiles)) + for _, f := range req.LogFiles { + files = append(files, models.WatchedLogFile{Path: f, Type: "error"}) + } + if _, err := models.CreateAgent(tx.Querier, models.DBLogWatcherAgentType, &models.CreateAgentParams{ + PMMAgentID: req.PmmAgentId, + ServiceID: service.ServiceID, + LogWatcherOptions: models.LogWatcherOptions{Files: files}, + LogLevel: services.SpecifyLogLevel(req.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_FATAL), + }); err != nil { + return err + } + } + return nil }) diff --git a/managed/services/server/deps.go b/managed/services/server/deps.go index 5d1c510130b..c78042dbd4a 100644 --- a/managed/services/server/deps.go +++ b/managed/services/server/deps.go @@ -117,3 +117,8 @@ type victoriaMetricsParams interface { type nomadService interface { UpdateConfiguration(settings *models.Settings) error } + +// logsClickhouseService applies the log/trace retention TTL to the ClickHouse logs/traces tables. +type logsClickhouseService interface { + ApplyTTL(retention time.Duration) error +} diff --git a/managed/services/server/server.go b/managed/services/server/server.go index c02daafb822..33193a01868 100644 --- a/managed/services/server/server.go +++ b/managed/services/server/server.go @@ -65,6 +65,7 @@ type Server struct { haService haService updater *Updater nomad nomadService + logsClickhouse logsClickhouseService l *logrus.Entry @@ -100,6 +101,7 @@ type Params struct { Dus *distribution.Service HAService haService Nomad nomadService + LogsClickhouse logsClickhouseService } // NewServer returns new server for Server service. @@ -125,6 +127,7 @@ func NewServer(params *Params) (*Server, error) { updater: params.Updater, haService: params.HAService, nomad: params.Nomad, + logsClickhouse: params.LogsClickhouse, l: logrus.WithField("component", "server"), pmmUpdateAuthFile: path, envSettings: &models.ChangeSettingsParams{}, @@ -488,6 +491,7 @@ func (s *Server) convertSettings(settings *models.Settings, disableInternalPgQan FrequentInterval: durationpb.New(settings.SaaS.AdvisorRunIntervals.FrequentInterval), }, DataRetention: durationpb.New(settings.DataRetention), + LogsRetention: durationpb.New(settings.LogsRetention), SshKey: settings.SSHKey, AwsPartitions: settings.AWSPartitions, AdvisorEnabled: settings.IsAdvisorsEnabled(), @@ -661,6 +665,7 @@ func (s *Server) ChangeSettings(ctx context.Context, req *serverv1.ChangeSetting LR: metricsRes.GetLr().AsDuration(), }, DataRetention: req.DataRetention.AsDuration(), + LogsRetention: req.LogsRetention.AsDuration(), SSHKey: req.SshKey, } @@ -737,6 +742,13 @@ func (s *Server) ChangeSettings(ctx context.Context, req *serverv1.ChangeSetting } } + // Apply the log/trace retention TTL to ClickHouse when it changes (instant, no qan-api2 restart). + if s.logsClickhouse != nil && oldSettings.LogsRetention != newSettings.LogsRetention { + if err := s.logsClickhouse.ApplyTTL(newSettings.LogsRetention); err != nil { + s.l.Errorf("Failed to apply logs retention TTL: %s", err) + } + } + return &serverv1.ChangeSettingsResponse{ Settings: s.convertSettings(newSettings, disableInternalPgQan), }, nil diff --git a/managed/services/supervisord/otelcol_config.go b/managed/services/supervisord/otelcol_config.go new file mode 100644 index 00000000000..fdd0ecf631d --- /dev/null +++ b/managed/services/supervisord/otelcol_config.go @@ -0,0 +1,147 @@ +// Copyright (C) 2023 Percona LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package supervisord + +import ( + "bytes" + "os" + "path/filepath" + "strings" + "text/template" + + "github.com/pkg/errors" + "github.com/sirupsen/logrus" + + "github.com/percona/pmm/managed/utils/envvars" +) + +// otelcolConfig is the path to the OpenTelemetry Collector configuration file. +const otelcolConfig = "/etc/otelcol/config.yaml" + +// SaveOtelcolConfig renders and saves the OpenTelemetry Collector configuration. +// The config does not carry a TTL: tables are owned by pmm-managed (managed/services/clickhouse, with +// create_schema=false), so the exporter's ttl option is a no-op; retention is enforced by +// ALTER TABLE ... MODIFY TTL in pmm-managed. +func SaveOtelcolConfig() error { + cfg, err := marshalOtelcolConfig() + if err != nil { + return err + } + if err := os.MkdirAll(filepath.Dir(otelcolConfig), 0o755); err != nil { //nolint:gosec,mnd + return errors.Wrapf(err, "failed to create otelcol config directory") + } + if err := saveConfig(otelcolConfig, cfg); err != nil { + return errors.Wrapf(err, "failed to save otelcol config") + } + logrus.Info("otelcol config.yaml has been updated.") + return nil +} + +func marshalOtelcolConfig() ([]byte, error) { + clickhouseAddr := envvars.GetEnv("PMM_CLICKHOUSE_ADDR", defaultClickhouseAddr) + clickhouseAddrPair := strings.SplitN(clickhouseAddr, ":", 2) //nolint:mnd + if len(clickhouseAddrPair) != 2 { //nolint:mnd + return nil, errors.Errorf("unexpected PMM_CLICKHOUSE_ADDR format: %q", clickhouseAddr) + } + + params := map[string]any{ + "ClickhouseHost": clickhouseAddrPair[0], + "ClickhousePort": clickhouseAddrPair[1], + "ClickhouseDatabase": envvars.GetEnv("PMM_CLICKHOUSE_DATABASE", defaultClickhouseDatabase), + "ClickhouseUser": envvars.GetEnv("PMM_CLICKHOUSE_USER", defaultClickhouseUser), + "ClickhousePassword": envvars.GetEnv("PMM_CLICKHOUSE_PASSWORD", defaultClickhousePassword), + } + + var buf bytes.Buffer + if err := otelcolTemplate.Execute(&buf, params); err != nil { + return nil, errors.Wrapf(err, "failed to render otelcol template") + } + return buf.Bytes(), nil +} + +// otelcolTemplate renders /etc/otelcol/config.yaml. +// The filelog receiver captures all server component logs from /srv/logs/*.log without touching any +// component; the OTLP receivers are loopback-only and fed by pmm-managed (client/DB logs). Both +// pipelines write the OTel schema into the existing ClickHouse via the clickhouseexporter, which does +// NOT create the schema (tables are owned by pmm-managed's managed/services/clickhouse migrations). +var otelcolTemplate = template.Must(template.New("otelcol").Option("missingkey=error").Parse(`receivers: + otlp: + protocols: + grpc: + endpoint: 127.0.0.1:4317 + http: + endpoint: 127.0.0.1:4318 + filelog: + include: + - /srv/logs/*.log + exclude: + - /srv/logs/otelcol.log + start_at: end + include_file_name: true + include_file_path: false + operators: + - type: add + field: resource["pmm.source"] + value: server + - type: regex_parser + parse_from: attributes["log.file.name"] + regex: '^(?P[^.]+)' + - type: move + from: attributes.service_name + to: resource["service.name"] + - type: remove + field: attributes["log.file.name"] + +processors: + memory_limiter: + check_interval: 2s + limit_percentage: 75 + spike_limit_percentage: 25 + batch: + timeout: 5s + send_batch_size: 1000 + +exporters: + clickhouse: + endpoint: "tcp://{{ .ClickhouseHost }}:{{ .ClickhousePort }}?dial_timeout=10s&compress=lz4" + database: "{{ .ClickhouseDatabase }}" + username: "{{ .ClickhouseUser }}" + password: "{{ .ClickhousePassword }}" + logs_table_name: logs + traces_table_name: traces + create_schema: false + timeout: 10s + sending_queue: + queue_size: 1000 + retry_on_failure: + enabled: true + initial_interval: 5s + max_interval: 30s + +service: + telemetry: + logs: + level: warn + pipelines: + logs: + receivers: [otlp, filelog] + processors: [memory_limiter, batch] + exporters: [clickhouse] + traces: + receivers: [otlp] + processors: [memory_limiter, batch] + exporters: [clickhouse] +`)) diff --git a/managed/services/supervisord/otelcol_config_test.go b/managed/services/supervisord/otelcol_config_test.go new file mode 100644 index 00000000000..aedbcf28dba --- /dev/null +++ b/managed/services/supervisord/otelcol_config_test.go @@ -0,0 +1,49 @@ +// Copyright (C) 2023 Percona LLC +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package supervisord + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestMarshalOtelcolConfig(t *testing.T) { + t.Setenv("PMM_CLICKHOUSE_ADDR", "127.0.0.1:9000") + t.Setenv("PMM_CLICKHOUSE_DATABASE", "pmm") + t.Setenv("PMM_CLICKHOUSE_USER", "default") + t.Setenv("PMM_CLICKHOUSE_PASSWORD", "clickhouse") + + t.Run("renders config", func(t *testing.T) { + cfg, err := marshalOtelcolConfig() + require.NoError(t, err) + s := string(cfg) + assert.Contains(t, s, `endpoint: "tcp://127.0.0.1:9000?dial_timeout=10s&compress=lz4"`) + assert.Contains(t, s, `database: "pmm"`) + assert.Contains(t, s, "logs_table_name: logs") + assert.Contains(t, s, "traces_table_name: traces") + assert.Contains(t, s, "create_schema: false") + assert.Contains(t, s, "/srv/logs/*.log") + assert.Contains(t, s, "127.0.0.1:4317") + }) + + t.Run("bad addr", func(t *testing.T) { + t.Setenv("PMM_CLICKHOUSE_ADDR", "no-port") + _, err := marshalOtelcolConfig() + require.Error(t, err) + }) +} diff --git a/managed/services/supervisord/pmm_config.go b/managed/services/supervisord/pmm_config.go index 56b88d38cce..7c62821877c 100644 --- a/managed/services/supervisord/pmm_config.go +++ b/managed/services/supervisord/pmm_config.go @@ -149,6 +149,20 @@ stdout_logfile_backups = 2 redirect_stderr = true {{- end }} +[program:otelcol] +priority = 3 +command = /usr/sbin/otelcol-contrib --config=/etc/otelcol/config.yaml +autorestart = true +autostart = true +startretries = 10 +startsecs = 1 +stopsignal = TERM +stopwaitsecs = 30 +stdout_logfile = /srv/logs/otelcol.log +stdout_logfile_maxbytes = 30MB +stdout_logfile_backups = 2 +redirect_stderr = true + [program:nginx] priority = 4 command = nginx diff --git a/managed/testdata/supervisord.d/pmm-db_disabled.ini b/managed/testdata/supervisord.d/pmm-db_disabled.ini index 01ce3c3a7fd..3846737b904 100644 --- a/managed/testdata/supervisord.d/pmm-db_disabled.ini +++ b/managed/testdata/supervisord.d/pmm-db_disabled.ini @@ -40,6 +40,20 @@ stdout_logfile_maxbytes = 50MB stdout_logfile_backups = 2 redirect_stderr = true +[program:otelcol] +priority = 3 +command = /usr/sbin/otelcol-contrib --config=/etc/otelcol/config.yaml +autorestart = true +autostart = true +startretries = 10 +startsecs = 1 +stopsignal = TERM +stopwaitsecs = 30 +stdout_logfile = /srv/logs/otelcol.log +stdout_logfile_maxbytes = 30MB +stdout_logfile_backups = 2 +redirect_stderr = true + [program:nginx] priority = 4 command = nginx diff --git a/managed/testdata/supervisord.d/pmm-db_enabled.ini b/managed/testdata/supervisord.d/pmm-db_enabled.ini index 54d70f365c2..4b831ca6217 100644 --- a/managed/testdata/supervisord.d/pmm-db_enabled.ini +++ b/managed/testdata/supervisord.d/pmm-db_enabled.ini @@ -63,6 +63,20 @@ stdout_logfile_maxbytes = 50MB stdout_logfile_backups = 2 redirect_stderr = true +[program:otelcol] +priority = 3 +command = /usr/sbin/otelcol-contrib --config=/etc/otelcol/config.yaml +autorestart = true +autostart = true +startretries = 10 +startsecs = 1 +stopsignal = TERM +stopwaitsecs = 30 +stdout_logfile = /srv/logs/otelcol.log +stdout_logfile_maxbytes = 30MB +stdout_logfile_backups = 2 +redirect_stderr = true + [program:nginx] priority = 4 command = nginx From efe5cded3478c47f2164f806e1b15d3061622db4 Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Wed, 3 Jun 2026 10:02:59 +0300 Subject: [PATCH 02/12] PMM-14689 Run make gen --- agent/client/mock_supervisor_test.go | 36 +- api/accesscontrol/v1beta1/accesscontrol.pb.go | 1 - api/actions/v1/actions.pb.go | 1 - api/advisors/v1/advisors.pb.go | 1 - api/agent/v1/agent.pb.go | 236 +++++------ api/agent/v1/agent.pb.validate.go | 259 ++++++++---- api/agent/v1/collector.pb.go | 1 - api/agentlocal/v1/agentlocal.pb.go | 1 - .../agent_local_service/status2_responses.go | 7 +- .../agent_local_service/status_responses.go | 7 +- api/agentlocal/v1/json/v1.json | 6 +- api/alerting/v1/alerting.pb.go | 1 - api/alerting/v1/params.pb.go | 1 - api/backup/v1/artifacts.pb.go | 1 - api/backup/v1/backup.pb.go | 1 - api/backup/v1/common.pb.go | 1 - api/backup/v1/errors.pb.go | 1 - api/backup/v1/locations.pb.go | 1 - api/backup/v1/restores.pb.go | 1 - api/common/common.pb.go | 1 - api/common/metrics_resolutions.pb.go | 1 - api/dump/v1beta1/dump.pb.go | 1 - api/extensions/v1/redact.pb.go | 1 - api/ha/v1beta1/ha.pb.go | 1 - api/inventory/v1/agent_status.pb.go | 1 - api/inventory/v1/agents.pb.go | 254 ++++++------ api/inventory/v1/agents.pb.validate.go | 245 ++++++----- .../agents_service/get_agent_responses.go | 370 +++++++++++++++++ .../agents_service/list_agents_responses.go | 379 ++++++++++++++++++ api/inventory/v1/json/v1.json | 198 ++++++++- api/inventory/v1/log_level.pb.go | 1 - api/inventory/v1/nodes.pb.go | 1 - api/inventory/v1/services.pb.go | 1 - api/logship/v1/logship.pb.go | 27 +- api/logship/v1/logship.pb.validate.go | 9 +- api/logship/v1/logship_grpc.pb.go | 1 + api/management/v1/agent.pb.go | 1 - api/management/v1/annotation.pb.go | 1 - api/management/v1/azure.pb.go | 1 - api/management/v1/external.pb.go | 1 - api/management/v1/haproxy.pb.go | 1 - .../add_service_responses.go | 12 +- api/management/v1/json/v1.json | 13 + api/management/v1/metrics.pb.go | 1 - api/management/v1/mongodb.pb.go | 1 - api/management/v1/mysql.pb.go | 44 +- api/management/v1/mysql.pb.validate.go | 6 +- api/management/v1/node.pb.go | 1 - api/management/v1/postgresql.pb.go | 1 - api/management/v1/proxysql.pb.go | 1 - api/management/v1/rds.pb.go | 1 - api/management/v1/service.pb.go | 1 - api/management/v1/severity.pb.go | 1 - api/management/v1/valkey.pb.go | 1 - api/qan/v1/collector.pb.go | 1 - api/qan/v1/filters.pb.go | 1 - api/qan/v1/object_details.pb.go | 1 - api/qan/v1/profile.pb.go | 1 - api/qan/v1/qan.pb.go | 1 - api/qan/v1/service.pb.go | 1 - api/realtimeanalytics/v1/collector.pb.go | 1 - api/realtimeanalytics/v1/query.pb.go | 1 - .../v1/realtimeanalytics.pb.go | 1 - api/server/v1/httperror.pb.go | 1 - .../change_settings_responses.go | 6 + .../server_service/get_settings_responses.go | 3 + api/server/v1/json/v1.json | 15 + api/server/v1/server.pb.go | 82 ++-- api/server/v1/server.pb.validate.go | 80 ++-- api/swagger/swagger-dev.json | 226 ++++++++++- api/swagger/swagger.json | 226 ++++++++++- api/uievents/v1/server.pb.go | 1 - api/user/v1/user.pb.go | 1 - .../alerting/mock_grafana_client_test.go | 2 +- 74 files changed, 2176 insertions(+), 621 deletions(-) diff --git a/agent/client/mock_supervisor_test.go b/agent/client/mock_supervisor_test.go index d5266e28174..277bbf3113f 100644 --- a/agent/client/mock_supervisor_test.go +++ b/agent/client/mock_supervisor_test.go @@ -102,60 +102,60 @@ func (_m *mockSupervisor) Describe(_a0 chan<- *prometheus.Desc) { _m.Called(_a0) } -// QANRequests provides a mock function with no fields -func (_m *mockSupervisor) QANRequests() <-chan *agentv1.QANCollectRequest { +// LogRequests provides a mock function with no fields +func (_m *mockSupervisor) LogRequests() <-chan *logshipv1.ShipRequest { ret := _m.Called() if len(ret) == 0 { - panic("no return value specified for QANRequests") + panic("no return value specified for LogRequests") } - var r0 <-chan *agentv1.QANCollectRequest - if rf, ok := ret.Get(0).(func() <-chan *agentv1.QANCollectRequest); ok { + var r0 <-chan *logshipv1.ShipRequest + if rf, ok := ret.Get(0).(func() <-chan *logshipv1.ShipRequest); ok { r0 = rf() } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(<-chan *agentv1.QANCollectRequest) + r0 = ret.Get(0).(<-chan *logshipv1.ShipRequest) } } return r0 } -// RTARequests provides a mock function with no fields -func (_m *mockSupervisor) RTARequests() <-chan *realtimeanalyticsv1.CollectRequest { +// QANRequests provides a mock function with no fields +func (_m *mockSupervisor) QANRequests() <-chan *agentv1.QANCollectRequest { ret := _m.Called() if len(ret) == 0 { - panic("no return value specified for RTARequests") + panic("no return value specified for QANRequests") } - var r0 <-chan *realtimeanalyticsv1.CollectRequest - if rf, ok := ret.Get(0).(func() <-chan *realtimeanalyticsv1.CollectRequest); ok { + var r0 <-chan *agentv1.QANCollectRequest + if rf, ok := ret.Get(0).(func() <-chan *agentv1.QANCollectRequest); ok { r0 = rf() } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(<-chan *realtimeanalyticsv1.CollectRequest) + r0 = ret.Get(0).(<-chan *agentv1.QANCollectRequest) } } return r0 } -// LogRequests provides a mock function with no fields -func (_m *mockSupervisor) LogRequests() <-chan *logshipv1.ShipRequest { +// RTARequests provides a mock function with no fields +func (_m *mockSupervisor) RTARequests() <-chan *realtimeanalyticsv1.CollectRequest { ret := _m.Called() if len(ret) == 0 { - panic("no return value specified for LogRequests") + panic("no return value specified for RTARequests") } - var r0 <-chan *logshipv1.ShipRequest - if rf, ok := ret.Get(0).(func() <-chan *logshipv1.ShipRequest); ok { + var r0 <-chan *realtimeanalyticsv1.CollectRequest + if rf, ok := ret.Get(0).(func() <-chan *realtimeanalyticsv1.CollectRequest); ok { r0 = rf() } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(<-chan *logshipv1.ShipRequest) + r0 = ret.Get(0).(<-chan *realtimeanalyticsv1.CollectRequest) } } diff --git a/api/accesscontrol/v1beta1/accesscontrol.pb.go b/api/accesscontrol/v1beta1/accesscontrol.pb.go index f5e8ea4b004..ebec3bf05b7 100644 --- a/api/accesscontrol/v1beta1/accesscontrol.pb.go +++ b/api/accesscontrol/v1beta1/accesscontrol.pb.go @@ -844,7 +844,6 @@ var ( (*ListRolesResponse_RoleData)(nil), // 14: accesscontrol.v1beta1.ListRolesResponse.RoleData } ) - var file_accesscontrol_v1beta1_accesscontrol_proto_depIdxs = []int32{ 14, // 0: accesscontrol.v1beta1.ListRolesResponse.roles:type_name -> accesscontrol.v1beta1.ListRolesResponse.RoleData 0, // 1: accesscontrol.v1beta1.AccessControlService.CreateRole:input_type -> accesscontrol.v1beta1.CreateRoleRequest diff --git a/api/actions/v1/actions.pb.go b/api/actions/v1/actions.pb.go index f1cfdec8cfa..35461ae3739 100644 --- a/api/actions/v1/actions.pb.go +++ b/api/actions/v1/actions.pb.go @@ -2649,7 +2649,6 @@ var ( (*StartServiceActionResponse)(nil), // 32: actions.v1.StartServiceActionResponse } ) - var file_actions_v1_actions_proto_depIdxs = []int32{ 3, // 0: actions.v1.StartServiceActionRequest.mysql_explain:type_name -> actions.v1.StartMySQLExplainActionParams 5, // 1: actions.v1.StartServiceActionRequest.mysql_explain_json:type_name -> actions.v1.StartMySQLExplainJSONActionParams diff --git a/api/advisors/v1/advisors.pb.go b/api/advisors/v1/advisors.pb.go index 3e4995415ad..efbc083a3a9 100644 --- a/api/advisors/v1/advisors.pb.go +++ b/api/advisors/v1/advisors.pb.go @@ -1387,7 +1387,6 @@ var ( v1.Severity(0), // 22: management.v1.Severity } ) - var file_advisors_v1_advisors_proto_depIdxs = []int32{ 22, // 0: advisors.v1.AdvisorCheckResult.severity:type_name -> management.v1.Severity 20, // 1: advisors.v1.AdvisorCheckResult.labels:type_name -> advisors.v1.AdvisorCheckResult.LabelsEntry diff --git a/api/agent/v1/agent.pb.go b/api/agent/v1/agent.pb.go index ac64fbe877d..503643b1469 100644 --- a/api/agent/v1/agent.pb.go +++ b/api/agent/v1/agent.pb.go @@ -7,17 +7,19 @@ package agentv1 import ( - v11 "github.com/percona/pmm/api/backup/v1" - _ "github.com/percona/pmm/api/extensions/v1" - v1 "github.com/percona/pmm/api/inventory/v1" + reflect "reflect" + sync "sync" + unsafe "unsafe" + status "google.golang.org/genproto/googleapis/rpc/status" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" - unsafe "unsafe" + + v11 "github.com/percona/pmm/api/backup/v1" + _ "github.com/percona/pmm/api/extensions/v1" + v1 "github.com/percona/pmm/api/inventory/v1" ) const ( @@ -7128,116 +7130,118 @@ func file_agent_v1_agent_proto_rawDescGZIP() []byte { return file_agent_v1_agent_proto_rawDescData } -var file_agent_v1_agent_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_agent_v1_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 92) -var file_agent_v1_agent_proto_goTypes = []any{ - (MysqlExplainOutputFormat)(0), // 0: agent.v1.MysqlExplainOutputFormat - (StartActionRequest_RestartSystemServiceParams_SystemService)(0), // 1: agent.v1.StartActionRequest.RestartSystemServiceParams.SystemService - (*TextFiles)(nil), // 2: agent.v1.TextFiles - (*Ping)(nil), // 3: agent.v1.Ping - (*Pong)(nil), // 4: agent.v1.Pong - (*QANCollectRequest)(nil), // 5: agent.v1.QANCollectRequest - (*QANCollectResponse)(nil), // 6: agent.v1.QANCollectResponse - (*StateChangedRequest)(nil), // 7: agent.v1.StateChangedRequest - (*StateChangedResponse)(nil), // 8: agent.v1.StateChangedResponse - (*SetStateRequest)(nil), // 9: agent.v1.SetStateRequest - (*SetStateResponse)(nil), // 10: agent.v1.SetStateResponse - (*QueryActionValue)(nil), // 11: agent.v1.QueryActionValue - (*QueryActionSlice)(nil), // 12: agent.v1.QueryActionSlice - (*QueryActionMap)(nil), // 13: agent.v1.QueryActionMap - (*QueryActionBinary)(nil), // 14: agent.v1.QueryActionBinary - (*QueryActionResult)(nil), // 15: agent.v1.QueryActionResult - (*StartActionRequest)(nil), // 16: agent.v1.StartActionRequest - (*StartActionResponse)(nil), // 17: agent.v1.StartActionResponse - (*StopActionRequest)(nil), // 18: agent.v1.StopActionRequest - (*StopActionResponse)(nil), // 19: agent.v1.StopActionResponse - (*ActionResultRequest)(nil), // 20: agent.v1.ActionResultRequest - (*ActionResultResponse)(nil), // 21: agent.v1.ActionResultResponse - (*PBMSwitchPITRRequest)(nil), // 22: agent.v1.PBMSwitchPITRRequest - (*PBMSwitchPITRResponse)(nil), // 23: agent.v1.PBMSwitchPITRResponse - (*AgentLogsRequest)(nil), // 24: agent.v1.AgentLogsRequest - (*AgentLogsResponse)(nil), // 25: agent.v1.AgentLogsResponse - (*CheckConnectionRequest)(nil), // 26: agent.v1.CheckConnectionRequest - (*CheckConnectionResponse)(nil), // 27: agent.v1.CheckConnectionResponse - (*ServiceInfoRequest)(nil), // 28: agent.v1.ServiceInfoRequest - (*ServiceInfoResponse)(nil), // 29: agent.v1.ServiceInfoResponse - (*JobStatusRequest)(nil), // 30: agent.v1.JobStatusRequest - (*JobStatusResponse)(nil), // 31: agent.v1.JobStatusResponse - (*S3LocationConfig)(nil), // 32: agent.v1.S3LocationConfig - (*FilesystemLocationConfig)(nil), // 33: agent.v1.FilesystemLocationConfig - (*StartJobRequest)(nil), // 34: agent.v1.StartJobRequest - (*StartJobResponse)(nil), // 35: agent.v1.StartJobResponse - (*StopJobRequest)(nil), // 36: agent.v1.StopJobRequest - (*StopJobResponse)(nil), // 37: agent.v1.StopJobResponse - (*JobResult)(nil), // 38: agent.v1.JobResult - (*JobProgress)(nil), // 39: agent.v1.JobProgress - (*GetVersionsRequest)(nil), // 40: agent.v1.GetVersionsRequest - (*GetVersionsResponse)(nil), // 41: agent.v1.GetVersionsResponse - (*AgentMessage)(nil), // 42: agent.v1.AgentMessage - (*ServerMessage)(nil), // 43: agent.v1.ServerMessage - nil, // 44: agent.v1.TextFiles.FilesEntry - (*SetStateRequest_AgentProcess)(nil), // 45: agent.v1.SetStateRequest.AgentProcess - nil, // 46: agent.v1.SetStateRequest.AgentProcessesEntry - (*SetStateRequest_BuiltinAgent)(nil), // 47: agent.v1.SetStateRequest.BuiltinAgent - nil, // 48: agent.v1.SetStateRequest.BuiltinAgentsEntry - nil, // 49: agent.v1.SetStateRequest.AgentProcess.TextFilesEntry - nil, // 50: agent.v1.SetStateRequest.BuiltinAgent.EnvEntry - nil, // 51: agent.v1.QueryActionMap.MapEntry - (*StartActionRequest_MySQLExplainParams)(nil), // 52: agent.v1.StartActionRequest.MySQLExplainParams - (*StartActionRequest_MySQLShowCreateTableParams)(nil), // 53: agent.v1.StartActionRequest.MySQLShowCreateTableParams - (*StartActionRequest_MySQLShowTableStatusParams)(nil), // 54: agent.v1.StartActionRequest.MySQLShowTableStatusParams - (*StartActionRequest_MySQLShowIndexParams)(nil), // 55: agent.v1.StartActionRequest.MySQLShowIndexParams - (*StartActionRequest_PostgreSQLShowCreateTableParams)(nil), // 56: agent.v1.StartActionRequest.PostgreSQLShowCreateTableParams - (*StartActionRequest_PostgreSQLShowIndexParams)(nil), // 57: agent.v1.StartActionRequest.PostgreSQLShowIndexParams - (*StartActionRequest_MongoDBExplainParams)(nil), // 58: agent.v1.StartActionRequest.MongoDBExplainParams - (*StartActionRequest_PTSummaryParams)(nil), // 59: agent.v1.StartActionRequest.PTSummaryParams - (*StartActionRequest_PTPgSummaryParams)(nil), // 60: agent.v1.StartActionRequest.PTPgSummaryParams - (*StartActionRequest_PTMongoDBSummaryParams)(nil), // 61: agent.v1.StartActionRequest.PTMongoDBSummaryParams - (*StartActionRequest_PTMySQLSummaryParams)(nil), // 62: agent.v1.StartActionRequest.PTMySQLSummaryParams - (*StartActionRequest_MySQLQueryShowParams)(nil), // 63: agent.v1.StartActionRequest.MySQLQueryShowParams - (*StartActionRequest_MySQLQuerySelectParams)(nil), // 64: agent.v1.StartActionRequest.MySQLQuerySelectParams - (*StartActionRequest_PostgreSQLQueryShowParams)(nil), // 65: agent.v1.StartActionRequest.PostgreSQLQueryShowParams - (*StartActionRequest_PostgreSQLQuerySelectParams)(nil), // 66: agent.v1.StartActionRequest.PostgreSQLQuerySelectParams - (*StartActionRequest_MongoDBQueryGetParameterParams)(nil), // 67: agent.v1.StartActionRequest.MongoDBQueryGetParameterParams - (*StartActionRequest_MongoDBQueryBuildInfoParams)(nil), // 68: agent.v1.StartActionRequest.MongoDBQueryBuildInfoParams - (*StartActionRequest_MongoDBQueryGetCmdLineOptsParams)(nil), // 69: agent.v1.StartActionRequest.MongoDBQueryGetCmdLineOptsParams - (*StartActionRequest_MongoDBQueryReplSetGetStatusParams)(nil), // 70: agent.v1.StartActionRequest.MongoDBQueryReplSetGetStatusParams - (*StartActionRequest_MongoDBQueryGetDiagnosticDataParams)(nil), // 71: agent.v1.StartActionRequest.MongoDBQueryGetDiagnosticDataParams - (*StartActionRequest_RestartSystemServiceParams)(nil), // 72: agent.v1.StartActionRequest.RestartSystemServiceParams - (*CheckConnectionResponse_Stats)(nil), // 73: agent.v1.CheckConnectionResponse.Stats - (*StartJobRequest_MySQLBackup)(nil), // 74: agent.v1.StartJobRequest.MySQLBackup - (*StartJobRequest_MySQLRestoreBackup)(nil), // 75: agent.v1.StartJobRequest.MySQLRestoreBackup - (*StartJobRequest_MongoDBBackup)(nil), // 76: agent.v1.StartJobRequest.MongoDBBackup - (*StartJobRequest_MongoDBRestoreBackup)(nil), // 77: agent.v1.StartJobRequest.MongoDBRestoreBackup - (*JobResult_Error)(nil), // 78: agent.v1.JobResult.Error - (*JobResult_MongoDBBackup)(nil), // 79: agent.v1.JobResult.MongoDBBackup - (*JobResult_MySQLBackup)(nil), // 80: agent.v1.JobResult.MySQLBackup - (*JobResult_MySQLRestoreBackup)(nil), // 81: agent.v1.JobResult.MySQLRestoreBackup - (*JobResult_MongoDBRestoreBackup)(nil), // 82: agent.v1.JobResult.MongoDBRestoreBackup - (*JobProgress_MySQLBackup)(nil), // 83: agent.v1.JobProgress.MySQLBackup - (*JobProgress_MySQLRestoreBackup)(nil), // 84: agent.v1.JobProgress.MySQLRestoreBackup - (*JobProgress_Logs)(nil), // 85: agent.v1.JobProgress.Logs - (*GetVersionsRequest_MySQLd)(nil), // 86: agent.v1.GetVersionsRequest.MySQLd - (*GetVersionsRequest_Xtrabackup)(nil), // 87: agent.v1.GetVersionsRequest.Xtrabackup - (*GetVersionsRequest_Xbcloud)(nil), // 88: agent.v1.GetVersionsRequest.Xbcloud - (*GetVersionsRequest_Qpress)(nil), // 89: agent.v1.GetVersionsRequest.Qpress - (*GetVersionsRequest_MongoDB)(nil), // 90: agent.v1.GetVersionsRequest.MongoDB - (*GetVersionsRequest_PBM)(nil), // 91: agent.v1.GetVersionsRequest.PBM - (*GetVersionsRequest_Software)(nil), // 92: agent.v1.GetVersionsRequest.Software - (*GetVersionsResponse_Version)(nil), // 93: agent.v1.GetVersionsResponse.Version - (*timestamppb.Timestamp)(nil), // 94: google.protobuf.Timestamp - (*MetricsBucket)(nil), // 95: agent.v1.MetricsBucket - (v1.AgentStatus)(0), // 96: inventory.v1.AgentStatus - (*durationpb.Duration)(nil), // 97: google.protobuf.Duration - (v1.ServiceType)(0), // 98: inventory.v1.ServiceType - (*status.Status)(nil), // 99: google.rpc.Status - (v1.AgentType)(0), // 100: inventory.v1.AgentType - (*v1.RTAOptions)(nil), // 101: inventory.v1.RTAOptions - (*v1.WatchedLog)(nil), // 102: inventory.v1.WatchedLog - (v11.DataModel)(0), // 103: backup.v1.DataModel - (*v11.PbmMetadata)(nil), // 104: backup.v1.PbmMetadata - (*v11.Metadata)(nil), // 105: backup.v1.Metadata -} +var ( + file_agent_v1_agent_proto_enumTypes = make([]protoimpl.EnumInfo, 2) + file_agent_v1_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 92) + file_agent_v1_agent_proto_goTypes = []any{ + MysqlExplainOutputFormat(0), // 0: agent.v1.MysqlExplainOutputFormat + StartActionRequest_RestartSystemServiceParams_SystemService(0), // 1: agent.v1.StartActionRequest.RestartSystemServiceParams.SystemService + (*TextFiles)(nil), // 2: agent.v1.TextFiles + (*Ping)(nil), // 3: agent.v1.Ping + (*Pong)(nil), // 4: agent.v1.Pong + (*QANCollectRequest)(nil), // 5: agent.v1.QANCollectRequest + (*QANCollectResponse)(nil), // 6: agent.v1.QANCollectResponse + (*StateChangedRequest)(nil), // 7: agent.v1.StateChangedRequest + (*StateChangedResponse)(nil), // 8: agent.v1.StateChangedResponse + (*SetStateRequest)(nil), // 9: agent.v1.SetStateRequest + (*SetStateResponse)(nil), // 10: agent.v1.SetStateResponse + (*QueryActionValue)(nil), // 11: agent.v1.QueryActionValue + (*QueryActionSlice)(nil), // 12: agent.v1.QueryActionSlice + (*QueryActionMap)(nil), // 13: agent.v1.QueryActionMap + (*QueryActionBinary)(nil), // 14: agent.v1.QueryActionBinary + (*QueryActionResult)(nil), // 15: agent.v1.QueryActionResult + (*StartActionRequest)(nil), // 16: agent.v1.StartActionRequest + (*StartActionResponse)(nil), // 17: agent.v1.StartActionResponse + (*StopActionRequest)(nil), // 18: agent.v1.StopActionRequest + (*StopActionResponse)(nil), // 19: agent.v1.StopActionResponse + (*ActionResultRequest)(nil), // 20: agent.v1.ActionResultRequest + (*ActionResultResponse)(nil), // 21: agent.v1.ActionResultResponse + (*PBMSwitchPITRRequest)(nil), // 22: agent.v1.PBMSwitchPITRRequest + (*PBMSwitchPITRResponse)(nil), // 23: agent.v1.PBMSwitchPITRResponse + (*AgentLogsRequest)(nil), // 24: agent.v1.AgentLogsRequest + (*AgentLogsResponse)(nil), // 25: agent.v1.AgentLogsResponse + (*CheckConnectionRequest)(nil), // 26: agent.v1.CheckConnectionRequest + (*CheckConnectionResponse)(nil), // 27: agent.v1.CheckConnectionResponse + (*ServiceInfoRequest)(nil), // 28: agent.v1.ServiceInfoRequest + (*ServiceInfoResponse)(nil), // 29: agent.v1.ServiceInfoResponse + (*JobStatusRequest)(nil), // 30: agent.v1.JobStatusRequest + (*JobStatusResponse)(nil), // 31: agent.v1.JobStatusResponse + (*S3LocationConfig)(nil), // 32: agent.v1.S3LocationConfig + (*FilesystemLocationConfig)(nil), // 33: agent.v1.FilesystemLocationConfig + (*StartJobRequest)(nil), // 34: agent.v1.StartJobRequest + (*StartJobResponse)(nil), // 35: agent.v1.StartJobResponse + (*StopJobRequest)(nil), // 36: agent.v1.StopJobRequest + (*StopJobResponse)(nil), // 37: agent.v1.StopJobResponse + (*JobResult)(nil), // 38: agent.v1.JobResult + (*JobProgress)(nil), // 39: agent.v1.JobProgress + (*GetVersionsRequest)(nil), // 40: agent.v1.GetVersionsRequest + (*GetVersionsResponse)(nil), // 41: agent.v1.GetVersionsResponse + (*AgentMessage)(nil), // 42: agent.v1.AgentMessage + (*ServerMessage)(nil), // 43: agent.v1.ServerMessage + nil, // 44: agent.v1.TextFiles.FilesEntry + (*SetStateRequest_AgentProcess)(nil), // 45: agent.v1.SetStateRequest.AgentProcess + nil, // 46: agent.v1.SetStateRequest.AgentProcessesEntry + (*SetStateRequest_BuiltinAgent)(nil), // 47: agent.v1.SetStateRequest.BuiltinAgent + nil, // 48: agent.v1.SetStateRequest.BuiltinAgentsEntry + nil, // 49: agent.v1.SetStateRequest.AgentProcess.TextFilesEntry + nil, // 50: agent.v1.SetStateRequest.BuiltinAgent.EnvEntry + nil, // 51: agent.v1.QueryActionMap.MapEntry + (*StartActionRequest_MySQLExplainParams)(nil), // 52: agent.v1.StartActionRequest.MySQLExplainParams + (*StartActionRequest_MySQLShowCreateTableParams)(nil), // 53: agent.v1.StartActionRequest.MySQLShowCreateTableParams + (*StartActionRequest_MySQLShowTableStatusParams)(nil), // 54: agent.v1.StartActionRequest.MySQLShowTableStatusParams + (*StartActionRequest_MySQLShowIndexParams)(nil), // 55: agent.v1.StartActionRequest.MySQLShowIndexParams + (*StartActionRequest_PostgreSQLShowCreateTableParams)(nil), // 56: agent.v1.StartActionRequest.PostgreSQLShowCreateTableParams + (*StartActionRequest_PostgreSQLShowIndexParams)(nil), // 57: agent.v1.StartActionRequest.PostgreSQLShowIndexParams + (*StartActionRequest_MongoDBExplainParams)(nil), // 58: agent.v1.StartActionRequest.MongoDBExplainParams + (*StartActionRequest_PTSummaryParams)(nil), // 59: agent.v1.StartActionRequest.PTSummaryParams + (*StartActionRequest_PTPgSummaryParams)(nil), // 60: agent.v1.StartActionRequest.PTPgSummaryParams + (*StartActionRequest_PTMongoDBSummaryParams)(nil), // 61: agent.v1.StartActionRequest.PTMongoDBSummaryParams + (*StartActionRequest_PTMySQLSummaryParams)(nil), // 62: agent.v1.StartActionRequest.PTMySQLSummaryParams + (*StartActionRequest_MySQLQueryShowParams)(nil), // 63: agent.v1.StartActionRequest.MySQLQueryShowParams + (*StartActionRequest_MySQLQuerySelectParams)(nil), // 64: agent.v1.StartActionRequest.MySQLQuerySelectParams + (*StartActionRequest_PostgreSQLQueryShowParams)(nil), // 65: agent.v1.StartActionRequest.PostgreSQLQueryShowParams + (*StartActionRequest_PostgreSQLQuerySelectParams)(nil), // 66: agent.v1.StartActionRequest.PostgreSQLQuerySelectParams + (*StartActionRequest_MongoDBQueryGetParameterParams)(nil), // 67: agent.v1.StartActionRequest.MongoDBQueryGetParameterParams + (*StartActionRequest_MongoDBQueryBuildInfoParams)(nil), // 68: agent.v1.StartActionRequest.MongoDBQueryBuildInfoParams + (*StartActionRequest_MongoDBQueryGetCmdLineOptsParams)(nil), // 69: agent.v1.StartActionRequest.MongoDBQueryGetCmdLineOptsParams + (*StartActionRequest_MongoDBQueryReplSetGetStatusParams)(nil), // 70: agent.v1.StartActionRequest.MongoDBQueryReplSetGetStatusParams + (*StartActionRequest_MongoDBQueryGetDiagnosticDataParams)(nil), // 71: agent.v1.StartActionRequest.MongoDBQueryGetDiagnosticDataParams + (*StartActionRequest_RestartSystemServiceParams)(nil), // 72: agent.v1.StartActionRequest.RestartSystemServiceParams + (*CheckConnectionResponse_Stats)(nil), // 73: agent.v1.CheckConnectionResponse.Stats + (*StartJobRequest_MySQLBackup)(nil), // 74: agent.v1.StartJobRequest.MySQLBackup + (*StartJobRequest_MySQLRestoreBackup)(nil), // 75: agent.v1.StartJobRequest.MySQLRestoreBackup + (*StartJobRequest_MongoDBBackup)(nil), // 76: agent.v1.StartJobRequest.MongoDBBackup + (*StartJobRequest_MongoDBRestoreBackup)(nil), // 77: agent.v1.StartJobRequest.MongoDBRestoreBackup + (*JobResult_Error)(nil), // 78: agent.v1.JobResult.Error + (*JobResult_MongoDBBackup)(nil), // 79: agent.v1.JobResult.MongoDBBackup + (*JobResult_MySQLBackup)(nil), // 80: agent.v1.JobResult.MySQLBackup + (*JobResult_MySQLRestoreBackup)(nil), // 81: agent.v1.JobResult.MySQLRestoreBackup + (*JobResult_MongoDBRestoreBackup)(nil), // 82: agent.v1.JobResult.MongoDBRestoreBackup + (*JobProgress_MySQLBackup)(nil), // 83: agent.v1.JobProgress.MySQLBackup + (*JobProgress_MySQLRestoreBackup)(nil), // 84: agent.v1.JobProgress.MySQLRestoreBackup + (*JobProgress_Logs)(nil), // 85: agent.v1.JobProgress.Logs + (*GetVersionsRequest_MySQLd)(nil), // 86: agent.v1.GetVersionsRequest.MySQLd + (*GetVersionsRequest_Xtrabackup)(nil), // 87: agent.v1.GetVersionsRequest.Xtrabackup + (*GetVersionsRequest_Xbcloud)(nil), // 88: agent.v1.GetVersionsRequest.Xbcloud + (*GetVersionsRequest_Qpress)(nil), // 89: agent.v1.GetVersionsRequest.Qpress + (*GetVersionsRequest_MongoDB)(nil), // 90: agent.v1.GetVersionsRequest.MongoDB + (*GetVersionsRequest_PBM)(nil), // 91: agent.v1.GetVersionsRequest.PBM + (*GetVersionsRequest_Software)(nil), // 92: agent.v1.GetVersionsRequest.Software + (*GetVersionsResponse_Version)(nil), // 93: agent.v1.GetVersionsResponse.Version + (*timestamppb.Timestamp)(nil), // 94: google.protobuf.Timestamp + (*MetricsBucket)(nil), // 95: agent.v1.MetricsBucket + v1.AgentStatus(0), // 96: inventory.v1.AgentStatus + (*durationpb.Duration)(nil), // 97: google.protobuf.Duration + v1.ServiceType(0), // 98: inventory.v1.ServiceType + (*status.Status)(nil), // 99: google.rpc.Status + v1.AgentType(0), // 100: inventory.v1.AgentType + (*v1.RTAOptions)(nil), // 101: inventory.v1.RTAOptions + (*v1.WatchedLog)(nil), // 102: inventory.v1.WatchedLog + v11.DataModel(0), // 103: backup.v1.DataModel + (*v11.PbmMetadata)(nil), // 104: backup.v1.PbmMetadata + (*v11.Metadata)(nil), // 105: backup.v1.Metadata + } +) var file_agent_v1_agent_proto_depIdxs = []int32{ 44, // 0: agent.v1.TextFiles.files:type_name -> agent.v1.TextFiles.FilesEntry 94, // 1: agent.v1.Pong.current_time:type_name -> google.protobuf.Timestamp diff --git a/api/agent/v1/agent.pb.validate.go b/api/agent/v1/agent.pb.validate.go index e3eaab8937e..7f90a8796fe 100644 --- a/api/agent/v1/agent.pb.validate.go +++ b/api/agent/v1/agent.pb.validate.go @@ -19,7 +19,6 @@ import ( "google.golang.org/protobuf/types/known/anypb" backupv1 "github.com/percona/pmm/api/backup/v1" - inventoryv1 "github.com/percona/pmm/api/inventory/v1" ) @@ -135,7 +134,8 @@ func (e TextFilesValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = TextFilesValidationError{} @@ -233,7 +233,8 @@ func (e PingValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = PingValidationError{} @@ -360,7 +361,8 @@ func (e PongValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = PongValidationError{} @@ -496,7 +498,8 @@ func (e QANCollectRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = QANCollectRequestValidationError{} @@ -598,7 +601,8 @@ func (e QANCollectResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = QANCollectResponseValidationError{} @@ -710,7 +714,8 @@ func (e StateChangedRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StateChangedRequestValidationError{} @@ -812,7 +817,8 @@ func (e StateChangedResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StateChangedResponseValidationError{} @@ -1004,7 +1010,8 @@ func (e SetStateRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = SetStateRequestValidationError{} @@ -1104,7 +1111,8 @@ func (e SetStateResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = SetStateResponseValidationError{} @@ -1445,7 +1453,8 @@ func (e QueryActionValueValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = QueryActionValueValidationError{} @@ -1579,7 +1588,8 @@ func (e QueryActionSliceValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = QueryActionSliceValidationError{} @@ -1725,7 +1735,8 @@ func (e QueryActionMapValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = QueryActionMapValidationError{} @@ -1831,7 +1842,8 @@ func (e QueryActionBinaryValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = QueryActionBinaryValidationError{} @@ -2001,7 +2013,8 @@ func (e QueryActionResultValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = QueryActionResultValidationError{} @@ -3000,7 +3013,8 @@ func (e StartActionRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequestValidationError{} @@ -3102,7 +3116,8 @@ func (e StartActionResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionResponseValidationError{} @@ -3206,7 +3221,8 @@ func (e StopActionRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StopActionRequestValidationError{} @@ -3308,7 +3324,8 @@ func (e StopActionResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StopActionResponseValidationError{} @@ -3418,7 +3435,8 @@ func (e ActionResultRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ActionResultRequestValidationError{} @@ -3520,7 +3538,8 @@ func (e ActionResultResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ActionResultResponseValidationError{} @@ -3655,7 +3674,8 @@ func (e PBMSwitchPITRRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = PBMSwitchPITRRequestValidationError{} @@ -3759,7 +3779,8 @@ func (e PBMSwitchPITRResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = PBMSwitchPITRResponseValidationError{} @@ -3863,7 +3884,8 @@ func (e AgentLogsRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AgentLogsRequestValidationError{} @@ -3967,7 +3989,8 @@ func (e AgentLogsResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AgentLogsResponseValidationError{} @@ -4135,7 +4158,8 @@ func (e CheckConnectionRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = CheckConnectionRequestValidationError{} @@ -4239,7 +4263,8 @@ func (e CheckConnectionResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = CheckConnectionResponseValidationError{} @@ -4407,7 +4432,8 @@ func (e ServiceInfoRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ServiceInfoRequestValidationError{} @@ -4519,7 +4545,8 @@ func (e ServiceInfoResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ServiceInfoResponseValidationError{} @@ -4621,7 +4648,8 @@ func (e JobStatusRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = JobStatusRequestValidationError{} @@ -4725,7 +4753,8 @@ func (e JobStatusResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = JobStatusResponseValidationError{} @@ -4835,7 +4864,8 @@ func (e S3LocationConfigValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = S3LocationConfigValidationError{} @@ -4939,7 +4969,8 @@ func (e FilesystemLocationConfigValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = FilesystemLocationConfigValidationError{} @@ -5239,7 +5270,8 @@ func (e StartJobRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartJobRequestValidationError{} @@ -5341,7 +5373,8 @@ func (e StartJobResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartJobResponseValidationError{} @@ -5443,7 +5476,8 @@ func (e StopJobRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StopJobRequestValidationError{} @@ -5543,7 +5577,8 @@ func (e StopJobResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StopJobResponseValidationError{} @@ -5883,7 +5918,8 @@ func (e JobResultValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = JobResultValidationError{} @@ -6141,7 +6177,8 @@ func (e JobProgressValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = JobProgressValidationError{} @@ -6277,7 +6314,8 @@ func (e GetVersionsRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetVersionsRequestValidationError{} @@ -6413,7 +6451,8 @@ func (e GetVersionsResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetVersionsResponseValidationError{} @@ -7286,7 +7325,8 @@ func (e AgentMessageValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AgentMessageValidationError{} @@ -8078,7 +8118,8 @@ func (e ServerMessageValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ServerMessageValidationError{} @@ -8189,7 +8230,8 @@ func (e SetStateRequest_AgentProcessValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = SetStateRequest_AgentProcessValidationError{} @@ -8408,7 +8450,8 @@ func (e SetStateRequest_BuiltinAgentValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = SetStateRequest_BuiltinAgentValidationError{} @@ -8552,7 +8595,8 @@ func (e StartActionRequest_MySQLExplainParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_MySQLExplainParamsValidationError{} @@ -8696,7 +8740,8 @@ func (e StartActionRequest_MySQLShowCreateTableParamsValidationError) Error() st key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_MySQLShowCreateTableParamsValidationError{} @@ -8840,7 +8885,8 @@ func (e StartActionRequest_MySQLShowTableStatusParamsValidationError) Error() st key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_MySQLShowTableStatusParamsValidationError{} @@ -8981,7 +9027,8 @@ func (e StartActionRequest_MySQLShowIndexParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_MySQLShowIndexParamsValidationError{} @@ -9130,7 +9177,8 @@ func (e StartActionRequest_PostgreSQLShowCreateTableParamsValidationError) Error key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_PostgreSQLShowCreateTableParamsValidationError{} @@ -9272,7 +9320,8 @@ func (e StartActionRequest_PostgreSQLShowIndexParamsValidationError) Error() str key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_PostgreSQLShowIndexParamsValidationError{} @@ -9411,7 +9460,8 @@ func (e StartActionRequest_MongoDBExplainParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_MongoDBExplainParamsValidationError{} @@ -9516,7 +9566,8 @@ func (e StartActionRequest_PTSummaryParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_PTSummaryParamsValidationError{} @@ -9629,7 +9680,8 @@ func (e StartActionRequest_PTPgSummaryParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_PTPgSummaryParamsValidationError{} @@ -9743,7 +9795,8 @@ func (e StartActionRequest_PTMongoDBSummaryParamsValidationError) Error() string key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_PTMongoDBSummaryParamsValidationError{} @@ -9859,7 +9912,8 @@ func (e StartActionRequest_PTMySQLSummaryParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_PTMySQLSummaryParamsValidationError{} @@ -10000,7 +10054,8 @@ func (e StartActionRequest_MySQLQueryShowParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_MySQLQueryShowParamsValidationError{} @@ -10141,7 +10196,8 @@ func (e StartActionRequest_MySQLQuerySelectParamsValidationError) Error() string key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_MySQLQuerySelectParamsValidationError{} @@ -10281,7 +10337,8 @@ func (e StartActionRequest_PostgreSQLQueryShowParamsValidationError) Error() str key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_PostgreSQLQueryShowParamsValidationError{} @@ -10425,7 +10482,8 @@ func (e StartActionRequest_PostgreSQLQuerySelectParamsValidationError) Error() s key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_PostgreSQLQuerySelectParamsValidationError{} @@ -10569,7 +10627,8 @@ func (e StartActionRequest_MongoDBQueryGetParameterParamsValidationError) Error( key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_MongoDBQueryGetParameterParamsValidationError{} @@ -10709,7 +10768,8 @@ func (e StartActionRequest_MongoDBQueryBuildInfoParamsValidationError) Error() s key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_MongoDBQueryBuildInfoParamsValidationError{} @@ -10854,7 +10914,8 @@ func (e StartActionRequest_MongoDBQueryGetCmdLineOptsParamsValidationError) Erro key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_MongoDBQueryGetCmdLineOptsParamsValidationError{} @@ -11003,7 +11064,8 @@ func (e StartActionRequest_MongoDBQueryReplSetGetStatusParamsValidationError) Er key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_MongoDBQueryReplSetGetStatusParamsValidationError{} @@ -11152,7 +11214,8 @@ func (e StartActionRequest_MongoDBQueryGetDiagnosticDataParamsValidationError) E key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_MongoDBQueryGetDiagnosticDataParamsValidationError{} @@ -11263,7 +11326,8 @@ func (e StartActionRequest_RestartSystemServiceParamsValidationError) Error() st key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartActionRequest_RestartSystemServiceParamsValidationError{} @@ -11368,7 +11432,8 @@ func (e CheckConnectionResponse_StatsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = CheckConnectionResponse_StatsValidationError{} @@ -11531,7 +11596,8 @@ func (e StartJobRequest_MySQLBackupValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartJobRequest_MySQLBackupValidationError{} @@ -11688,7 +11754,8 @@ func (e StartJobRequest_MySQLRestoreBackupValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartJobRequest_MySQLRestoreBackupValidationError{} @@ -11917,7 +11984,8 @@ func (e StartJobRequest_MongoDBBackupValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartJobRequest_MongoDBBackupValidationError{} @@ -12202,7 +12270,8 @@ func (e StartJobRequest_MongoDBRestoreBackupValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartJobRequest_MongoDBRestoreBackupValidationError{} @@ -12304,7 +12373,8 @@ func (e JobResult_ErrorValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = JobResult_ErrorValidationError{} @@ -12437,7 +12507,8 @@ func (e JobResult_MongoDBBackupValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = JobResult_MongoDBBackupValidationError{} @@ -12568,7 +12639,8 @@ func (e JobResult_MySQLBackupValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = JobResult_MySQLBackupValidationError{} @@ -12671,7 +12743,8 @@ func (e JobResult_MySQLRestoreBackupValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = JobResult_MySQLRestoreBackupValidationError{} @@ -12774,7 +12847,8 @@ func (e JobResult_MongoDBRestoreBackupValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = JobResult_MongoDBRestoreBackupValidationError{} @@ -12876,7 +12950,8 @@ func (e JobProgress_MySQLBackupValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = JobProgress_MySQLBackupValidationError{} @@ -12979,7 +13054,8 @@ func (e JobProgress_MySQLRestoreBackupValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = JobProgress_MySQLRestoreBackupValidationError{} @@ -13085,7 +13161,8 @@ func (e JobProgress_LogsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = JobProgress_LogsValidationError{} @@ -13187,7 +13264,8 @@ func (e GetVersionsRequest_MySQLdValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetVersionsRequest_MySQLdValidationError{} @@ -13290,7 +13368,8 @@ func (e GetVersionsRequest_XtrabackupValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetVersionsRequest_XtrabackupValidationError{} @@ -13392,7 +13471,8 @@ func (e GetVersionsRequest_XbcloudValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetVersionsRequest_XbcloudValidationError{} @@ -13494,7 +13574,8 @@ func (e GetVersionsRequest_QpressValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetVersionsRequest_QpressValidationError{} @@ -13596,7 +13677,8 @@ func (e GetVersionsRequest_MongoDBValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetVersionsRequest_MongoDBValidationError{} @@ -13698,7 +13780,8 @@ func (e GetVersionsRequest_PBMValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetVersionsRequest_PBMValidationError{} @@ -14052,7 +14135,8 @@ func (e GetVersionsRequest_SoftwareValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetVersionsRequest_SoftwareValidationError{} @@ -14159,7 +14243,8 @@ func (e GetVersionsResponse_VersionValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetVersionsResponse_VersionValidationError{} diff --git a/api/agent/v1/collector.pb.go b/api/agent/v1/collector.pb.go index 65633c05d17..da17db39c64 100644 --- a/api/agent/v1/collector.pb.go +++ b/api/agent/v1/collector.pb.go @@ -2827,7 +2827,6 @@ var ( v1.AgentType(0), // 9: inventory.v1.AgentType } ) - var file_agent_v1_collector_proto_depIdxs = []int32{ 3, // 0: agent.v1.MetricsBucket.common:type_name -> agent.v1.MetricsBucket.Common 4, // 1: agent.v1.MetricsBucket.mysql:type_name -> agent.v1.MetricsBucket.MySQL diff --git a/api/agentlocal/v1/agentlocal.pb.go b/api/agentlocal/v1/agentlocal.pb.go index 7bb13a7cb58..12053d57921 100644 --- a/api/agentlocal/v1/agentlocal.pb.go +++ b/api/agentlocal/v1/agentlocal.pb.go @@ -485,7 +485,6 @@ var ( v1.AgentStatus(0), // 8: inventory.v1.AgentStatus } ) - var file_agentlocal_v1_agentlocal_proto_depIdxs = []int32{ 6, // 0: agentlocal.v1.ServerInfo.latency:type_name -> google.protobuf.Duration 6, // 1: agentlocal.v1.ServerInfo.clock_drift:type_name -> google.protobuf.Duration diff --git a/api/agentlocal/v1/json/client/agent_local_service/status2_responses.go b/api/agentlocal/v1/json/client/agent_local_service/status2_responses.go index 607efda9a14..2b67fe2298c 100644 --- a/api/agentlocal/v1/json/client/agent_local_service/status2_responses.go +++ b/api/agentlocal/v1/json/client/agent_local_service/status2_responses.go @@ -609,7 +609,7 @@ type Status2OKBodyAgentsInfoItems0 struct { AgentID string `json:"agent_id,omitempty"` // AgentType describes supported Agent types. - // Enum: ["AGENT_TYPE_UNSPECIFIED","AGENT_TYPE_PMM_AGENT","AGENT_TYPE_VM_AGENT","AGENT_TYPE_NODE_EXPORTER","AGENT_TYPE_MYSQLD_EXPORTER","AGENT_TYPE_MONGODB_EXPORTER","AGENT_TYPE_POSTGRES_EXPORTER","AGENT_TYPE_PROXYSQL_EXPORTER","AGENT_TYPE_VALKEY_EXPORTER","AGENT_TYPE_QAN_MYSQL_PERFSCHEMA_AGENT","AGENT_TYPE_QAN_MYSQL_SLOWLOG_AGENT","AGENT_TYPE_QAN_MONGODB_PROFILER_AGENT","AGENT_TYPE_QAN_MONGODB_MONGOLOG_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATEMENTS_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATMONITOR_AGENT","AGENT_TYPE_EXTERNAL_EXPORTER","AGENT_TYPE_RDS_EXPORTER","AGENT_TYPE_AZURE_DATABASE_EXPORTER","AGENT_TYPE_NOMAD_AGENT","AGENT_TYPE_RTA_MONGODB_AGENT"] + // Enum: ["AGENT_TYPE_UNSPECIFIED","AGENT_TYPE_PMM_AGENT","AGENT_TYPE_VM_AGENT","AGENT_TYPE_NODE_EXPORTER","AGENT_TYPE_MYSQLD_EXPORTER","AGENT_TYPE_MONGODB_EXPORTER","AGENT_TYPE_POSTGRES_EXPORTER","AGENT_TYPE_PROXYSQL_EXPORTER","AGENT_TYPE_VALKEY_EXPORTER","AGENT_TYPE_QAN_MYSQL_PERFSCHEMA_AGENT","AGENT_TYPE_QAN_MYSQL_SLOWLOG_AGENT","AGENT_TYPE_QAN_MONGODB_PROFILER_AGENT","AGENT_TYPE_QAN_MONGODB_MONGOLOG_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATEMENTS_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATMONITOR_AGENT","AGENT_TYPE_EXTERNAL_EXPORTER","AGENT_TYPE_RDS_EXPORTER","AGENT_TYPE_AZURE_DATABASE_EXPORTER","AGENT_TYPE_NOMAD_AGENT","AGENT_TYPE_RTA_MONGODB_AGENT","AGENT_TYPE_DB_LOG_WATCHER_AGENT"] AgentType *string `json:"agent_type,omitempty"` // AgentStatus represents actual Agent status. @@ -654,7 +654,7 @@ var status2OkBodyAgentsInfoItems0TypeAgentTypePropEnum []any func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_TYPE_UNSPECIFIED","AGENT_TYPE_PMM_AGENT","AGENT_TYPE_VM_AGENT","AGENT_TYPE_NODE_EXPORTER","AGENT_TYPE_MYSQLD_EXPORTER","AGENT_TYPE_MONGODB_EXPORTER","AGENT_TYPE_POSTGRES_EXPORTER","AGENT_TYPE_PROXYSQL_EXPORTER","AGENT_TYPE_VALKEY_EXPORTER","AGENT_TYPE_QAN_MYSQL_PERFSCHEMA_AGENT","AGENT_TYPE_QAN_MYSQL_SLOWLOG_AGENT","AGENT_TYPE_QAN_MONGODB_PROFILER_AGENT","AGENT_TYPE_QAN_MONGODB_MONGOLOG_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATEMENTS_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATMONITOR_AGENT","AGENT_TYPE_EXTERNAL_EXPORTER","AGENT_TYPE_RDS_EXPORTER","AGENT_TYPE_AZURE_DATABASE_EXPORTER","AGENT_TYPE_NOMAD_AGENT","AGENT_TYPE_RTA_MONGODB_AGENT"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_TYPE_UNSPECIFIED","AGENT_TYPE_PMM_AGENT","AGENT_TYPE_VM_AGENT","AGENT_TYPE_NODE_EXPORTER","AGENT_TYPE_MYSQLD_EXPORTER","AGENT_TYPE_MONGODB_EXPORTER","AGENT_TYPE_POSTGRES_EXPORTER","AGENT_TYPE_PROXYSQL_EXPORTER","AGENT_TYPE_VALKEY_EXPORTER","AGENT_TYPE_QAN_MYSQL_PERFSCHEMA_AGENT","AGENT_TYPE_QAN_MYSQL_SLOWLOG_AGENT","AGENT_TYPE_QAN_MONGODB_PROFILER_AGENT","AGENT_TYPE_QAN_MONGODB_MONGOLOG_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATEMENTS_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATMONITOR_AGENT","AGENT_TYPE_EXTERNAL_EXPORTER","AGENT_TYPE_RDS_EXPORTER","AGENT_TYPE_AZURE_DATABASE_EXPORTER","AGENT_TYPE_NOMAD_AGENT","AGENT_TYPE_RTA_MONGODB_AGENT","AGENT_TYPE_DB_LOG_WATCHER_AGENT"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -723,6 +723,9 @@ const ( // Status2OKBodyAgentsInfoItems0AgentTypeAGENTTYPERTAMONGODBAGENT captures enum value "AGENT_TYPE_RTA_MONGODB_AGENT" Status2OKBodyAgentsInfoItems0AgentTypeAGENTTYPERTAMONGODBAGENT string = "AGENT_TYPE_RTA_MONGODB_AGENT" + + // Status2OKBodyAgentsInfoItems0AgentTypeAGENTTYPEDBLOGWATCHERAGENT captures enum value "AGENT_TYPE_DB_LOG_WATCHER_AGENT" + Status2OKBodyAgentsInfoItems0AgentTypeAGENTTYPEDBLOGWATCHERAGENT string = "AGENT_TYPE_DB_LOG_WATCHER_AGENT" ) // prop value enum diff --git a/api/agentlocal/v1/json/client/agent_local_service/status_responses.go b/api/agentlocal/v1/json/client/agent_local_service/status_responses.go index 236c43b1008..3e0df28c071 100644 --- a/api/agentlocal/v1/json/client/agent_local_service/status_responses.go +++ b/api/agentlocal/v1/json/client/agent_local_service/status_responses.go @@ -646,7 +646,7 @@ type StatusOKBodyAgentsInfoItems0 struct { AgentID string `json:"agent_id,omitempty"` // AgentType describes supported Agent types. - // Enum: ["AGENT_TYPE_UNSPECIFIED","AGENT_TYPE_PMM_AGENT","AGENT_TYPE_VM_AGENT","AGENT_TYPE_NODE_EXPORTER","AGENT_TYPE_MYSQLD_EXPORTER","AGENT_TYPE_MONGODB_EXPORTER","AGENT_TYPE_POSTGRES_EXPORTER","AGENT_TYPE_PROXYSQL_EXPORTER","AGENT_TYPE_VALKEY_EXPORTER","AGENT_TYPE_QAN_MYSQL_PERFSCHEMA_AGENT","AGENT_TYPE_QAN_MYSQL_SLOWLOG_AGENT","AGENT_TYPE_QAN_MONGODB_PROFILER_AGENT","AGENT_TYPE_QAN_MONGODB_MONGOLOG_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATEMENTS_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATMONITOR_AGENT","AGENT_TYPE_EXTERNAL_EXPORTER","AGENT_TYPE_RDS_EXPORTER","AGENT_TYPE_AZURE_DATABASE_EXPORTER","AGENT_TYPE_NOMAD_AGENT","AGENT_TYPE_RTA_MONGODB_AGENT"] + // Enum: ["AGENT_TYPE_UNSPECIFIED","AGENT_TYPE_PMM_AGENT","AGENT_TYPE_VM_AGENT","AGENT_TYPE_NODE_EXPORTER","AGENT_TYPE_MYSQLD_EXPORTER","AGENT_TYPE_MONGODB_EXPORTER","AGENT_TYPE_POSTGRES_EXPORTER","AGENT_TYPE_PROXYSQL_EXPORTER","AGENT_TYPE_VALKEY_EXPORTER","AGENT_TYPE_QAN_MYSQL_PERFSCHEMA_AGENT","AGENT_TYPE_QAN_MYSQL_SLOWLOG_AGENT","AGENT_TYPE_QAN_MONGODB_PROFILER_AGENT","AGENT_TYPE_QAN_MONGODB_MONGOLOG_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATEMENTS_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATMONITOR_AGENT","AGENT_TYPE_EXTERNAL_EXPORTER","AGENT_TYPE_RDS_EXPORTER","AGENT_TYPE_AZURE_DATABASE_EXPORTER","AGENT_TYPE_NOMAD_AGENT","AGENT_TYPE_RTA_MONGODB_AGENT","AGENT_TYPE_DB_LOG_WATCHER_AGENT"] AgentType *string `json:"agent_type,omitempty"` // AgentStatus represents actual Agent status. @@ -691,7 +691,7 @@ var statusOkBodyAgentsInfoItems0TypeAgentTypePropEnum []any func init() { var res []string - if err := json.Unmarshal([]byte(`["AGENT_TYPE_UNSPECIFIED","AGENT_TYPE_PMM_AGENT","AGENT_TYPE_VM_AGENT","AGENT_TYPE_NODE_EXPORTER","AGENT_TYPE_MYSQLD_EXPORTER","AGENT_TYPE_MONGODB_EXPORTER","AGENT_TYPE_POSTGRES_EXPORTER","AGENT_TYPE_PROXYSQL_EXPORTER","AGENT_TYPE_VALKEY_EXPORTER","AGENT_TYPE_QAN_MYSQL_PERFSCHEMA_AGENT","AGENT_TYPE_QAN_MYSQL_SLOWLOG_AGENT","AGENT_TYPE_QAN_MONGODB_PROFILER_AGENT","AGENT_TYPE_QAN_MONGODB_MONGOLOG_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATEMENTS_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATMONITOR_AGENT","AGENT_TYPE_EXTERNAL_EXPORTER","AGENT_TYPE_RDS_EXPORTER","AGENT_TYPE_AZURE_DATABASE_EXPORTER","AGENT_TYPE_NOMAD_AGENT","AGENT_TYPE_RTA_MONGODB_AGENT"]`), &res); err != nil { + if err := json.Unmarshal([]byte(`["AGENT_TYPE_UNSPECIFIED","AGENT_TYPE_PMM_AGENT","AGENT_TYPE_VM_AGENT","AGENT_TYPE_NODE_EXPORTER","AGENT_TYPE_MYSQLD_EXPORTER","AGENT_TYPE_MONGODB_EXPORTER","AGENT_TYPE_POSTGRES_EXPORTER","AGENT_TYPE_PROXYSQL_EXPORTER","AGENT_TYPE_VALKEY_EXPORTER","AGENT_TYPE_QAN_MYSQL_PERFSCHEMA_AGENT","AGENT_TYPE_QAN_MYSQL_SLOWLOG_AGENT","AGENT_TYPE_QAN_MONGODB_PROFILER_AGENT","AGENT_TYPE_QAN_MONGODB_MONGOLOG_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATEMENTS_AGENT","AGENT_TYPE_QAN_POSTGRESQL_PGSTATMONITOR_AGENT","AGENT_TYPE_EXTERNAL_EXPORTER","AGENT_TYPE_RDS_EXPORTER","AGENT_TYPE_AZURE_DATABASE_EXPORTER","AGENT_TYPE_NOMAD_AGENT","AGENT_TYPE_RTA_MONGODB_AGENT","AGENT_TYPE_DB_LOG_WATCHER_AGENT"]`), &res); err != nil { panic(err) } for _, v := range res { @@ -760,6 +760,9 @@ const ( // StatusOKBodyAgentsInfoItems0AgentTypeAGENTTYPERTAMONGODBAGENT captures enum value "AGENT_TYPE_RTA_MONGODB_AGENT" StatusOKBodyAgentsInfoItems0AgentTypeAGENTTYPERTAMONGODBAGENT string = "AGENT_TYPE_RTA_MONGODB_AGENT" + + // StatusOKBodyAgentsInfoItems0AgentTypeAGENTTYPEDBLOGWATCHERAGENT captures enum value "AGENT_TYPE_DB_LOG_WATCHER_AGENT" + StatusOKBodyAgentsInfoItems0AgentTypeAGENTTYPEDBLOGWATCHERAGENT string = "AGENT_TYPE_DB_LOG_WATCHER_AGENT" ) // prop value enum diff --git a/api/agentlocal/v1/json/v1.json b/api/agentlocal/v1/json/v1.json index 1eb9d0f86fb..55eddb6385f 100644 --- a/api/agentlocal/v1/json/v1.json +++ b/api/agentlocal/v1/json/v1.json @@ -179,7 +179,8 @@ "AGENT_TYPE_RDS_EXPORTER", "AGENT_TYPE_AZURE_DATABASE_EXPORTER", "AGENT_TYPE_NOMAD_AGENT", - "AGENT_TYPE_RTA_MONGODB_AGENT" + "AGENT_TYPE_RTA_MONGODB_AGENT", + "AGENT_TYPE_DB_LOG_WATCHER_AGENT" ], "x-order": 1 }, @@ -378,7 +379,8 @@ "AGENT_TYPE_RDS_EXPORTER", "AGENT_TYPE_AZURE_DATABASE_EXPORTER", "AGENT_TYPE_NOMAD_AGENT", - "AGENT_TYPE_RTA_MONGODB_AGENT" + "AGENT_TYPE_RTA_MONGODB_AGENT", + "AGENT_TYPE_DB_LOG_WATCHER_AGENT" ], "x-order": 1 }, diff --git a/api/alerting/v1/alerting.pb.go b/api/alerting/v1/alerting.pb.go index 3b2c47d73ec..bccb6659d24 100644 --- a/api/alerting/v1/alerting.pb.go +++ b/api/alerting/v1/alerting.pb.go @@ -1459,7 +1459,6 @@ var ( (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp } ) - var file_alerting_v1_alerting_proto_depIdxs = []int32{ 22, // 0: alerting.v1.ParamDefinition.unit:type_name -> alerting.v1.ParamUnit 23, // 1: alerting.v1.ParamDefinition.type:type_name -> alerting.v1.ParamType diff --git a/api/alerting/v1/params.pb.go b/api/alerting/v1/params.pb.go index 69d88497102..eb001a606db 100644 --- a/api/alerting/v1/params.pb.go +++ b/api/alerting/v1/params.pb.go @@ -163,7 +163,6 @@ var ( ParamType(0), // 1: alerting.v1.ParamType } ) - var file_alerting_v1_params_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/backup/v1/artifacts.pb.go b/api/backup/v1/artifacts.pb.go index dde03ceefef..e2352f61cd1 100644 --- a/api/backup/v1/artifacts.pb.go +++ b/api/backup/v1/artifacts.pb.go @@ -656,7 +656,6 @@ var ( (*Metadata)(nil), // 12: backup.v1.Metadata } ) - var file_backup_v1_artifacts_proto_depIdxs = []int32{ 9, // 0: backup.v1.Artifact.data_model:type_name -> backup.v1.DataModel 0, // 1: backup.v1.Artifact.status:type_name -> backup.v1.BackupStatus diff --git a/api/backup/v1/backup.pb.go b/api/backup/v1/backup.pb.go index 4d587217600..19241fc6afd 100644 --- a/api/backup/v1/backup.pb.go +++ b/api/backup/v1/backup.pb.go @@ -1276,7 +1276,6 @@ var ( (*ListPitrTimerangesResponse)(nil), // 27: backup.v1.ListPitrTimerangesResponse } ) - var file_backup_v1_backup_proto_depIdxs = []int32{ 15, // 0: backup.v1.StartBackupRequest.retry_interval:type_name -> google.protobuf.Duration 16, // 1: backup.v1.StartBackupRequest.data_model:type_name -> backup.v1.DataModel diff --git a/api/backup/v1/common.pb.go b/api/backup/v1/common.pb.go index c8274024e38..f84ca11de32 100644 --- a/api/backup/v1/common.pb.go +++ b/api/backup/v1/common.pb.go @@ -423,7 +423,6 @@ var ( (*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp } ) - var file_backup_v1_common_proto_depIdxs = []int32{ 2, // 0: backup.v1.Metadata.file_list:type_name -> backup.v1.File 6, // 1: backup.v1.Metadata.restore_to:type_name -> google.protobuf.Timestamp diff --git a/api/backup/v1/errors.pb.go b/api/backup/v1/errors.pb.go index 902adc277c1..5709e5ac243 100644 --- a/api/backup/v1/errors.pb.go +++ b/api/backup/v1/errors.pb.go @@ -169,7 +169,6 @@ var ( (*Error)(nil), // 1: backup.v1.Error } ) - var file_backup_v1_errors_proto_depIdxs = []int32{ 0, // 0: backup.v1.Error.code:type_name -> backup.v1.ErrorCode 1, // [1:1] is the sub-list for method output_type diff --git a/api/backup/v1/locations.pb.go b/api/backup/v1/locations.pb.go index 396b552ee80..72c13dece43 100644 --- a/api/backup/v1/locations.pb.go +++ b/api/backup/v1/locations.pb.go @@ -833,7 +833,6 @@ var ( (*TestLocationConfigResponse)(nil), // 12: backup.v1.TestLocationConfigResponse } ) - var file_backup_v1_locations_proto_depIdxs = []int32{ 0, // 0: backup.v1.Location.filesystem_config:type_name -> backup.v1.FilesystemLocationConfig 1, // 1: backup.v1.Location.s3_config:type_name -> backup.v1.S3LocationConfig diff --git a/api/backup/v1/restores.pb.go b/api/backup/v1/restores.pb.go index ee12d6b9285..580c158b119 100644 --- a/api/backup/v1/restores.pb.go +++ b/api/backup/v1/restores.pb.go @@ -625,7 +625,6 @@ var ( (*LogChunk)(nil), // 10: backup.v1.LogChunk } ) - var file_backup_v1_restores_proto_depIdxs = []int32{ 8, // 0: backup.v1.RestoreHistoryItem.data_model:type_name -> backup.v1.DataModel 0, // 1: backup.v1.RestoreHistoryItem.status:type_name -> backup.v1.RestoreStatus diff --git a/api/common/common.pb.go b/api/common/common.pb.go index 0d05883daa1..2303ccd29ab 100644 --- a/api/common/common.pb.go +++ b/api/common/common.pb.go @@ -147,7 +147,6 @@ var ( nil, // 2: common.StringMap.ValuesEntry } ) - var file_common_common_proto_depIdxs = []int32{ 2, // 0: common.StringMap.values:type_name -> common.StringMap.ValuesEntry 1, // [1:1] is the sub-list for method output_type diff --git a/api/common/metrics_resolutions.pb.go b/api/common/metrics_resolutions.pb.go index 75e587ba9a5..389e4572992 100644 --- a/api/common/metrics_resolutions.pb.go +++ b/api/common/metrics_resolutions.pb.go @@ -118,7 +118,6 @@ var ( (*durationpb.Duration)(nil), // 1: google.protobuf.Duration } ) - var file_common_metrics_resolutions_proto_depIdxs = []int32{ 1, // 0: common.MetricsResolutions.hr:type_name -> google.protobuf.Duration 1, // 1: common.MetricsResolutions.mr:type_name -> google.protobuf.Duration diff --git a/api/dump/v1beta1/dump.pb.go b/api/dump/v1beta1/dump.pb.go index d031bce6b8f..76f0e473adf 100644 --- a/api/dump/v1beta1/dump.pb.go +++ b/api/dump/v1beta1/dump.pb.go @@ -897,7 +897,6 @@ var ( (*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp } ) - var file_dump_v1beta1_dump_proto_depIdxs = []int32{ 0, // 0: dump.v1beta1.Dump.status:type_name -> dump.v1beta1.DumpStatus 14, // 1: dump.v1beta1.Dump.start_time:type_name -> google.protobuf.Timestamp diff --git a/api/extensions/v1/redact.pb.go b/api/extensions/v1/redact.pb.go index 738ce213118..c850a90df3c 100644 --- a/api/extensions/v1/redact.pb.go +++ b/api/extensions/v1/redact.pb.go @@ -135,7 +135,6 @@ var ( (*descriptorpb.FieldOptions)(nil), // 1: google.protobuf.FieldOptions } ) - var file_extensions_v1_redact_proto_depIdxs = []int32{ 1, // 0: extensions.v1.sensitive:extendee -> google.protobuf.FieldOptions 0, // 1: extensions.v1.sensitive:type_name -> extensions.v1.RedactType diff --git a/api/ha/v1beta1/ha.pb.go b/api/ha/v1beta1/ha.pb.go index f798cccbcc0..655996ccdbc 100644 --- a/api/ha/v1beta1/ha.pb.go +++ b/api/ha/v1beta1/ha.pb.go @@ -351,7 +351,6 @@ var ( (*StatusResponse)(nil), // 5: ha.v1beta1.StatusResponse } ) - var file_ha_v1beta1_ha_proto_depIdxs = []int32{ 0, // 0: ha.v1beta1.HANode.role:type_name -> ha.v1beta1.NodeRole 2, // 1: ha.v1beta1.ListNodesResponse.nodes:type_name -> ha.v1beta1.HANode diff --git a/api/inventory/v1/agent_status.pb.go b/api/inventory/v1/agent_status.pb.go index 1e23074d2fc..ace1432a5e8 100644 --- a/api/inventory/v1/agent_status.pb.go +++ b/api/inventory/v1/agent_status.pb.go @@ -128,7 +128,6 @@ var ( AgentStatus(0), // 0: inventory.v1.AgentStatus } ) - var file_inventory_v1_agent_status_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/inventory/v1/agents.pb.go b/api/inventory/v1/agents.pb.go index 9499976ff3c..536b7c17157 100644 --- a/api/inventory/v1/agents.pb.go +++ b/api/inventory/v1/agents.pb.go @@ -7,17 +7,19 @@ package inventoryv1 import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + _ "github.com/envoyproxy/protoc-gen-validate/validate" _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" - common "github.com/percona/pmm/api/common" - _ "github.com/percona/pmm/api/extensions/v1" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" - reflect "reflect" - sync "sync" - unsafe "unsafe" + + common "github.com/percona/pmm/api/common" + _ "github.com/percona/pmm/api/extensions/v1" ) const ( @@ -12623,126 +12625,128 @@ func file_inventory_v1_agents_proto_rawDescGZIP() []byte { return file_inventory_v1_agents_proto_rawDescData } -var file_inventory_v1_agents_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_inventory_v1_agents_proto_msgTypes = make([]protoimpl.MessageInfo, 110) -var file_inventory_v1_agents_proto_goTypes = []any{ - (AgentType)(0), // 0: inventory.v1.AgentType - (*WatchedLog)(nil), // 1: inventory.v1.WatchedLog - (*PMMAgent)(nil), // 2: inventory.v1.PMMAgent - (*VMAgent)(nil), // 3: inventory.v1.VMAgent - (*NomadAgent)(nil), // 4: inventory.v1.NomadAgent - (*NodeExporter)(nil), // 5: inventory.v1.NodeExporter - (*MySQLdExporter)(nil), // 6: inventory.v1.MySQLdExporter - (*MongoDBExporter)(nil), // 7: inventory.v1.MongoDBExporter - (*PostgresExporter)(nil), // 8: inventory.v1.PostgresExporter - (*ProxySQLExporter)(nil), // 9: inventory.v1.ProxySQLExporter - (*ValkeyExporter)(nil), // 10: inventory.v1.ValkeyExporter - (*QANMySQLPerfSchemaAgent)(nil), // 11: inventory.v1.QANMySQLPerfSchemaAgent - (*QANMySQLSlowlogAgent)(nil), // 12: inventory.v1.QANMySQLSlowlogAgent - (*DBLogWatcherAgent)(nil), // 13: inventory.v1.DBLogWatcherAgent - (*QANMongoDBProfilerAgent)(nil), // 14: inventory.v1.QANMongoDBProfilerAgent - (*QANMongoDBMongologAgent)(nil), // 15: inventory.v1.QANMongoDBMongologAgent - (*RTAOptions)(nil), // 16: inventory.v1.RTAOptions - (*RTAMongoDBAgent)(nil), // 17: inventory.v1.RTAMongoDBAgent - (*QANPostgreSQLPgStatementsAgent)(nil), // 18: inventory.v1.QANPostgreSQLPgStatementsAgent - (*QANPostgreSQLPgStatMonitorAgent)(nil), // 19: inventory.v1.QANPostgreSQLPgStatMonitorAgent - (*RDSExporter)(nil), // 20: inventory.v1.RDSExporter - (*ExternalExporter)(nil), // 21: inventory.v1.ExternalExporter - (*AzureDatabaseExporter)(nil), // 22: inventory.v1.AzureDatabaseExporter - (*ChangeCommonAgentParams)(nil), // 23: inventory.v1.ChangeCommonAgentParams - (*ListAgentsRequest)(nil), // 24: inventory.v1.ListAgentsRequest - (*ListAgentsResponse)(nil), // 25: inventory.v1.ListAgentsResponse - (*GetAgentRequest)(nil), // 26: inventory.v1.GetAgentRequest - (*GetAgentResponse)(nil), // 27: inventory.v1.GetAgentResponse - (*GetAgentLogsRequest)(nil), // 28: inventory.v1.GetAgentLogsRequest - (*GetAgentLogsResponse)(nil), // 29: inventory.v1.GetAgentLogsResponse - (*AddAgentRequest)(nil), // 30: inventory.v1.AddAgentRequest - (*AddAgentResponse)(nil), // 31: inventory.v1.AddAgentResponse - (*ChangeAgentRequest)(nil), // 32: inventory.v1.ChangeAgentRequest - (*ChangeAgentResponse)(nil), // 33: inventory.v1.ChangeAgentResponse - (*AddPMMAgentParams)(nil), // 34: inventory.v1.AddPMMAgentParams - (*AddNodeExporterParams)(nil), // 35: inventory.v1.AddNodeExporterParams - (*ChangeNodeExporterParams)(nil), // 36: inventory.v1.ChangeNodeExporterParams - (*AddMySQLdExporterParams)(nil), // 37: inventory.v1.AddMySQLdExporterParams - (*ChangeMySQLdExporterParams)(nil), // 38: inventory.v1.ChangeMySQLdExporterParams - (*AddMongoDBExporterParams)(nil), // 39: inventory.v1.AddMongoDBExporterParams - (*ChangeMongoDBExporterParams)(nil), // 40: inventory.v1.ChangeMongoDBExporterParams - (*AddPostgresExporterParams)(nil), // 41: inventory.v1.AddPostgresExporterParams - (*ChangePostgresExporterParams)(nil), // 42: inventory.v1.ChangePostgresExporterParams - (*AddProxySQLExporterParams)(nil), // 43: inventory.v1.AddProxySQLExporterParams - (*ChangeProxySQLExporterParams)(nil), // 44: inventory.v1.ChangeProxySQLExporterParams - (*AddQANMySQLPerfSchemaAgentParams)(nil), // 45: inventory.v1.AddQANMySQLPerfSchemaAgentParams - (*ChangeQANMySQLPerfSchemaAgentParams)(nil), // 46: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams - (*AddQANMySQLSlowlogAgentParams)(nil), // 47: inventory.v1.AddQANMySQLSlowlogAgentParams - (*ChangeQANMySQLSlowlogAgentParams)(nil), // 48: inventory.v1.ChangeQANMySQLSlowlogAgentParams - (*AddQANMongoDBProfilerAgentParams)(nil), // 49: inventory.v1.AddQANMongoDBProfilerAgentParams - (*ChangeQANMongoDBProfilerAgentParams)(nil), // 50: inventory.v1.ChangeQANMongoDBProfilerAgentParams - (*AddQANMongoDBMongologAgentParams)(nil), // 51: inventory.v1.AddQANMongoDBMongologAgentParams - (*ChangeQANMongoDBMongologAgentParams)(nil), // 52: inventory.v1.ChangeQANMongoDBMongologAgentParams - (*AddQANPostgreSQLPgStatementsAgentParams)(nil), // 53: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams - (*ChangeQANPostgreSQLPgStatementsAgentParams)(nil), // 54: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams - (*AddQANPostgreSQLPgStatMonitorAgentParams)(nil), // 55: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams - (*ChangeQANPostgreSQLPgStatMonitorAgentParams)(nil), // 56: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams - (*AddRDSExporterParams)(nil), // 57: inventory.v1.AddRDSExporterParams - (*ChangeRDSExporterParams)(nil), // 58: inventory.v1.ChangeRDSExporterParams - (*AddExternalExporterParams)(nil), // 59: inventory.v1.AddExternalExporterParams - (*ChangeExternalExporterParams)(nil), // 60: inventory.v1.ChangeExternalExporterParams - (*AddAzureDatabaseExporterParams)(nil), // 61: inventory.v1.AddAzureDatabaseExporterParams - (*ChangeAzureDatabaseExporterParams)(nil), // 62: inventory.v1.ChangeAzureDatabaseExporterParams - (*ChangeNomadAgentParams)(nil), // 63: inventory.v1.ChangeNomadAgentParams - (*AddValkeyExporterParams)(nil), // 64: inventory.v1.AddValkeyExporterParams - (*ChangeValkeyExporterParams)(nil), // 65: inventory.v1.ChangeValkeyExporterParams - (*AddRTAMongoDBAgentParams)(nil), // 66: inventory.v1.AddRTAMongoDBAgentParams - (*ChangeRTAMongoDBAgentParams)(nil), // 67: inventory.v1.ChangeRTAMongoDBAgentParams - (*RemoveAgentRequest)(nil), // 68: inventory.v1.RemoveAgentRequest - (*RemoveAgentResponse)(nil), // 69: inventory.v1.RemoveAgentResponse - nil, // 70: inventory.v1.PMMAgent.CustomLabelsEntry - nil, // 71: inventory.v1.NodeExporter.CustomLabelsEntry - nil, // 72: inventory.v1.MySQLdExporter.CustomLabelsEntry - nil, // 73: inventory.v1.MySQLdExporter.ExtraDsnParamsEntry - nil, // 74: inventory.v1.MongoDBExporter.CustomLabelsEntry - nil, // 75: inventory.v1.PostgresExporter.CustomLabelsEntry - nil, // 76: inventory.v1.ProxySQLExporter.CustomLabelsEntry - nil, // 77: inventory.v1.ValkeyExporter.CustomLabelsEntry - nil, // 78: inventory.v1.QANMySQLPerfSchemaAgent.CustomLabelsEntry - nil, // 79: inventory.v1.QANMySQLPerfSchemaAgent.ExtraDsnParamsEntry - nil, // 80: inventory.v1.QANMySQLSlowlogAgent.CustomLabelsEntry - nil, // 81: inventory.v1.QANMySQLSlowlogAgent.ExtraDsnParamsEntry - nil, // 82: inventory.v1.DBLogWatcherAgent.CustomLabelsEntry - nil, // 83: inventory.v1.QANMongoDBProfilerAgent.CustomLabelsEntry - nil, // 84: inventory.v1.QANMongoDBMongologAgent.CustomLabelsEntry - nil, // 85: inventory.v1.RTAMongoDBAgent.CustomLabelsEntry - nil, // 86: inventory.v1.QANPostgreSQLPgStatementsAgent.CustomLabelsEntry - nil, // 87: inventory.v1.QANPostgreSQLPgStatMonitorAgent.CustomLabelsEntry - nil, // 88: inventory.v1.RDSExporter.CustomLabelsEntry - nil, // 89: inventory.v1.ExternalExporter.CustomLabelsEntry - nil, // 90: inventory.v1.AzureDatabaseExporter.CustomLabelsEntry - nil, // 91: inventory.v1.AddPMMAgentParams.CustomLabelsEntry - nil, // 92: inventory.v1.AddNodeExporterParams.CustomLabelsEntry - nil, // 93: inventory.v1.AddMySQLdExporterParams.CustomLabelsEntry - nil, // 94: inventory.v1.AddMySQLdExporterParams.ExtraDsnParamsEntry - nil, // 95: inventory.v1.AddMongoDBExporterParams.CustomLabelsEntry - nil, // 96: inventory.v1.AddPostgresExporterParams.CustomLabelsEntry - nil, // 97: inventory.v1.AddProxySQLExporterParams.CustomLabelsEntry - nil, // 98: inventory.v1.AddQANMySQLPerfSchemaAgentParams.CustomLabelsEntry - nil, // 99: inventory.v1.AddQANMySQLPerfSchemaAgentParams.ExtraDsnParamsEntry - nil, // 100: inventory.v1.AddQANMySQLSlowlogAgentParams.CustomLabelsEntry - nil, // 101: inventory.v1.AddQANMySQLSlowlogAgentParams.ExtraDsnParamsEntry - nil, // 102: inventory.v1.AddQANMongoDBProfilerAgentParams.CustomLabelsEntry - nil, // 103: inventory.v1.AddQANMongoDBMongologAgentParams.CustomLabelsEntry - nil, // 104: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.CustomLabelsEntry - nil, // 105: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.CustomLabelsEntry - nil, // 106: inventory.v1.AddRDSExporterParams.CustomLabelsEntry - nil, // 107: inventory.v1.AddExternalExporterParams.CustomLabelsEntry - nil, // 108: inventory.v1.AddAzureDatabaseExporterParams.CustomLabelsEntry - nil, // 109: inventory.v1.AddValkeyExporterParams.CustomLabelsEntry - nil, // 110: inventory.v1.AddRTAMongoDBAgentParams.CustomLabelsEntry - (AgentStatus)(0), // 111: inventory.v1.AgentStatus - (LogLevel)(0), // 112: inventory.v1.LogLevel - (*common.MetricsResolutions)(nil), // 113: common.MetricsResolutions - (*durationpb.Duration)(nil), // 114: google.protobuf.Duration - (*common.StringMap)(nil), // 115: common.StringMap -} +var ( + file_inventory_v1_agents_proto_enumTypes = make([]protoimpl.EnumInfo, 1) + file_inventory_v1_agents_proto_msgTypes = make([]protoimpl.MessageInfo, 110) + file_inventory_v1_agents_proto_goTypes = []any{ + AgentType(0), // 0: inventory.v1.AgentType + (*WatchedLog)(nil), // 1: inventory.v1.WatchedLog + (*PMMAgent)(nil), // 2: inventory.v1.PMMAgent + (*VMAgent)(nil), // 3: inventory.v1.VMAgent + (*NomadAgent)(nil), // 4: inventory.v1.NomadAgent + (*NodeExporter)(nil), // 5: inventory.v1.NodeExporter + (*MySQLdExporter)(nil), // 6: inventory.v1.MySQLdExporter + (*MongoDBExporter)(nil), // 7: inventory.v1.MongoDBExporter + (*PostgresExporter)(nil), // 8: inventory.v1.PostgresExporter + (*ProxySQLExporter)(nil), // 9: inventory.v1.ProxySQLExporter + (*ValkeyExporter)(nil), // 10: inventory.v1.ValkeyExporter + (*QANMySQLPerfSchemaAgent)(nil), // 11: inventory.v1.QANMySQLPerfSchemaAgent + (*QANMySQLSlowlogAgent)(nil), // 12: inventory.v1.QANMySQLSlowlogAgent + (*DBLogWatcherAgent)(nil), // 13: inventory.v1.DBLogWatcherAgent + (*QANMongoDBProfilerAgent)(nil), // 14: inventory.v1.QANMongoDBProfilerAgent + (*QANMongoDBMongologAgent)(nil), // 15: inventory.v1.QANMongoDBMongologAgent + (*RTAOptions)(nil), // 16: inventory.v1.RTAOptions + (*RTAMongoDBAgent)(nil), // 17: inventory.v1.RTAMongoDBAgent + (*QANPostgreSQLPgStatementsAgent)(nil), // 18: inventory.v1.QANPostgreSQLPgStatementsAgent + (*QANPostgreSQLPgStatMonitorAgent)(nil), // 19: inventory.v1.QANPostgreSQLPgStatMonitorAgent + (*RDSExporter)(nil), // 20: inventory.v1.RDSExporter + (*ExternalExporter)(nil), // 21: inventory.v1.ExternalExporter + (*AzureDatabaseExporter)(nil), // 22: inventory.v1.AzureDatabaseExporter + (*ChangeCommonAgentParams)(nil), // 23: inventory.v1.ChangeCommonAgentParams + (*ListAgentsRequest)(nil), // 24: inventory.v1.ListAgentsRequest + (*ListAgentsResponse)(nil), // 25: inventory.v1.ListAgentsResponse + (*GetAgentRequest)(nil), // 26: inventory.v1.GetAgentRequest + (*GetAgentResponse)(nil), // 27: inventory.v1.GetAgentResponse + (*GetAgentLogsRequest)(nil), // 28: inventory.v1.GetAgentLogsRequest + (*GetAgentLogsResponse)(nil), // 29: inventory.v1.GetAgentLogsResponse + (*AddAgentRequest)(nil), // 30: inventory.v1.AddAgentRequest + (*AddAgentResponse)(nil), // 31: inventory.v1.AddAgentResponse + (*ChangeAgentRequest)(nil), // 32: inventory.v1.ChangeAgentRequest + (*ChangeAgentResponse)(nil), // 33: inventory.v1.ChangeAgentResponse + (*AddPMMAgentParams)(nil), // 34: inventory.v1.AddPMMAgentParams + (*AddNodeExporterParams)(nil), // 35: inventory.v1.AddNodeExporterParams + (*ChangeNodeExporterParams)(nil), // 36: inventory.v1.ChangeNodeExporterParams + (*AddMySQLdExporterParams)(nil), // 37: inventory.v1.AddMySQLdExporterParams + (*ChangeMySQLdExporterParams)(nil), // 38: inventory.v1.ChangeMySQLdExporterParams + (*AddMongoDBExporterParams)(nil), // 39: inventory.v1.AddMongoDBExporterParams + (*ChangeMongoDBExporterParams)(nil), // 40: inventory.v1.ChangeMongoDBExporterParams + (*AddPostgresExporterParams)(nil), // 41: inventory.v1.AddPostgresExporterParams + (*ChangePostgresExporterParams)(nil), // 42: inventory.v1.ChangePostgresExporterParams + (*AddProxySQLExporterParams)(nil), // 43: inventory.v1.AddProxySQLExporterParams + (*ChangeProxySQLExporterParams)(nil), // 44: inventory.v1.ChangeProxySQLExporterParams + (*AddQANMySQLPerfSchemaAgentParams)(nil), // 45: inventory.v1.AddQANMySQLPerfSchemaAgentParams + (*ChangeQANMySQLPerfSchemaAgentParams)(nil), // 46: inventory.v1.ChangeQANMySQLPerfSchemaAgentParams + (*AddQANMySQLSlowlogAgentParams)(nil), // 47: inventory.v1.AddQANMySQLSlowlogAgentParams + (*ChangeQANMySQLSlowlogAgentParams)(nil), // 48: inventory.v1.ChangeQANMySQLSlowlogAgentParams + (*AddQANMongoDBProfilerAgentParams)(nil), // 49: inventory.v1.AddQANMongoDBProfilerAgentParams + (*ChangeQANMongoDBProfilerAgentParams)(nil), // 50: inventory.v1.ChangeQANMongoDBProfilerAgentParams + (*AddQANMongoDBMongologAgentParams)(nil), // 51: inventory.v1.AddQANMongoDBMongologAgentParams + (*ChangeQANMongoDBMongologAgentParams)(nil), // 52: inventory.v1.ChangeQANMongoDBMongologAgentParams + (*AddQANPostgreSQLPgStatementsAgentParams)(nil), // 53: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams + (*ChangeQANPostgreSQLPgStatementsAgentParams)(nil), // 54: inventory.v1.ChangeQANPostgreSQLPgStatementsAgentParams + (*AddQANPostgreSQLPgStatMonitorAgentParams)(nil), // 55: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams + (*ChangeQANPostgreSQLPgStatMonitorAgentParams)(nil), // 56: inventory.v1.ChangeQANPostgreSQLPgStatMonitorAgentParams + (*AddRDSExporterParams)(nil), // 57: inventory.v1.AddRDSExporterParams + (*ChangeRDSExporterParams)(nil), // 58: inventory.v1.ChangeRDSExporterParams + (*AddExternalExporterParams)(nil), // 59: inventory.v1.AddExternalExporterParams + (*ChangeExternalExporterParams)(nil), // 60: inventory.v1.ChangeExternalExporterParams + (*AddAzureDatabaseExporterParams)(nil), // 61: inventory.v1.AddAzureDatabaseExporterParams + (*ChangeAzureDatabaseExporterParams)(nil), // 62: inventory.v1.ChangeAzureDatabaseExporterParams + (*ChangeNomadAgentParams)(nil), // 63: inventory.v1.ChangeNomadAgentParams + (*AddValkeyExporterParams)(nil), // 64: inventory.v1.AddValkeyExporterParams + (*ChangeValkeyExporterParams)(nil), // 65: inventory.v1.ChangeValkeyExporterParams + (*AddRTAMongoDBAgentParams)(nil), // 66: inventory.v1.AddRTAMongoDBAgentParams + (*ChangeRTAMongoDBAgentParams)(nil), // 67: inventory.v1.ChangeRTAMongoDBAgentParams + (*RemoveAgentRequest)(nil), // 68: inventory.v1.RemoveAgentRequest + (*RemoveAgentResponse)(nil), // 69: inventory.v1.RemoveAgentResponse + nil, // 70: inventory.v1.PMMAgent.CustomLabelsEntry + nil, // 71: inventory.v1.NodeExporter.CustomLabelsEntry + nil, // 72: inventory.v1.MySQLdExporter.CustomLabelsEntry + nil, // 73: inventory.v1.MySQLdExporter.ExtraDsnParamsEntry + nil, // 74: inventory.v1.MongoDBExporter.CustomLabelsEntry + nil, // 75: inventory.v1.PostgresExporter.CustomLabelsEntry + nil, // 76: inventory.v1.ProxySQLExporter.CustomLabelsEntry + nil, // 77: inventory.v1.ValkeyExporter.CustomLabelsEntry + nil, // 78: inventory.v1.QANMySQLPerfSchemaAgent.CustomLabelsEntry + nil, // 79: inventory.v1.QANMySQLPerfSchemaAgent.ExtraDsnParamsEntry + nil, // 80: inventory.v1.QANMySQLSlowlogAgent.CustomLabelsEntry + nil, // 81: inventory.v1.QANMySQLSlowlogAgent.ExtraDsnParamsEntry + nil, // 82: inventory.v1.DBLogWatcherAgent.CustomLabelsEntry + nil, // 83: inventory.v1.QANMongoDBProfilerAgent.CustomLabelsEntry + nil, // 84: inventory.v1.QANMongoDBMongologAgent.CustomLabelsEntry + nil, // 85: inventory.v1.RTAMongoDBAgent.CustomLabelsEntry + nil, // 86: inventory.v1.QANPostgreSQLPgStatementsAgent.CustomLabelsEntry + nil, // 87: inventory.v1.QANPostgreSQLPgStatMonitorAgent.CustomLabelsEntry + nil, // 88: inventory.v1.RDSExporter.CustomLabelsEntry + nil, // 89: inventory.v1.ExternalExporter.CustomLabelsEntry + nil, // 90: inventory.v1.AzureDatabaseExporter.CustomLabelsEntry + nil, // 91: inventory.v1.AddPMMAgentParams.CustomLabelsEntry + nil, // 92: inventory.v1.AddNodeExporterParams.CustomLabelsEntry + nil, // 93: inventory.v1.AddMySQLdExporterParams.CustomLabelsEntry + nil, // 94: inventory.v1.AddMySQLdExporterParams.ExtraDsnParamsEntry + nil, // 95: inventory.v1.AddMongoDBExporterParams.CustomLabelsEntry + nil, // 96: inventory.v1.AddPostgresExporterParams.CustomLabelsEntry + nil, // 97: inventory.v1.AddProxySQLExporterParams.CustomLabelsEntry + nil, // 98: inventory.v1.AddQANMySQLPerfSchemaAgentParams.CustomLabelsEntry + nil, // 99: inventory.v1.AddQANMySQLPerfSchemaAgentParams.ExtraDsnParamsEntry + nil, // 100: inventory.v1.AddQANMySQLSlowlogAgentParams.CustomLabelsEntry + nil, // 101: inventory.v1.AddQANMySQLSlowlogAgentParams.ExtraDsnParamsEntry + nil, // 102: inventory.v1.AddQANMongoDBProfilerAgentParams.CustomLabelsEntry + nil, // 103: inventory.v1.AddQANMongoDBMongologAgentParams.CustomLabelsEntry + nil, // 104: inventory.v1.AddQANPostgreSQLPgStatementsAgentParams.CustomLabelsEntry + nil, // 105: inventory.v1.AddQANPostgreSQLPgStatMonitorAgentParams.CustomLabelsEntry + nil, // 106: inventory.v1.AddRDSExporterParams.CustomLabelsEntry + nil, // 107: inventory.v1.AddExternalExporterParams.CustomLabelsEntry + nil, // 108: inventory.v1.AddAzureDatabaseExporterParams.CustomLabelsEntry + nil, // 109: inventory.v1.AddValkeyExporterParams.CustomLabelsEntry + nil, // 110: inventory.v1.AddRTAMongoDBAgentParams.CustomLabelsEntry + AgentStatus(0), // 111: inventory.v1.AgentStatus + LogLevel(0), // 112: inventory.v1.LogLevel + (*common.MetricsResolutions)(nil), // 113: common.MetricsResolutions + (*durationpb.Duration)(nil), // 114: google.protobuf.Duration + (*common.StringMap)(nil), // 115: common.StringMap + } +) var file_inventory_v1_agents_proto_depIdxs = []int32{ 70, // 0: inventory.v1.PMMAgent.custom_labels:type_name -> inventory.v1.PMMAgent.CustomLabelsEntry 111, // 1: inventory.v1.VMAgent.status:type_name -> inventory.v1.AgentStatus diff --git a/api/inventory/v1/agents.pb.validate.go b/api/inventory/v1/agents.pb.validate.go index 5833cc42500..b120e490772 100644 --- a/api/inventory/v1/agents.pb.validate.go +++ b/api/inventory/v1/agents.pb.validate.go @@ -128,7 +128,8 @@ func (e WatchedLogValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = WatchedLogValidationError{} @@ -237,7 +238,8 @@ func (e PMMAgentValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = PMMAgentValidationError{} @@ -345,7 +347,8 @@ func (e VMAgentValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = VMAgentValidationError{} @@ -456,7 +459,8 @@ func (e NomadAgentValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = NomadAgentValidationError{} @@ -604,7 +608,8 @@ func (e NodeExporterValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = NodeExporterValidationError{} @@ -804,7 +809,8 @@ func (e MySQLdExporterValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = MySQLdExporterValidationError{} @@ -994,7 +1000,8 @@ func (e MongoDBExporterValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = MongoDBExporterValidationError{} @@ -1184,7 +1191,8 @@ func (e PostgresExporterValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = PostgresExporterValidationError{} @@ -1370,7 +1378,8 @@ func (e ProxySQLExporterValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ProxySQLExporterValidationError{} @@ -1554,7 +1563,8 @@ func (e ValkeyExporterValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ValkeyExporterValidationError{} @@ -1692,7 +1702,8 @@ func (e QANMySQLPerfSchemaAgentValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = QANMySQLPerfSchemaAgentValidationError{} @@ -1832,7 +1843,8 @@ func (e QANMySQLSlowlogAgentValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = QANMySQLSlowlogAgentValidationError{} @@ -1986,7 +1998,8 @@ func (e DBLogWatcherAgentValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = DBLogWatcherAgentValidationError{} @@ -2112,7 +2125,8 @@ func (e QANMongoDBProfilerAgentValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = QANMongoDBProfilerAgentValidationError{} @@ -2238,7 +2252,8 @@ func (e QANMongoDBMongologAgentValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = QANMongoDBMongologAgentValidationError{} @@ -2367,7 +2382,8 @@ func (e RTAOptionsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = RTAOptionsValidationError{} @@ -2516,7 +2532,8 @@ func (e RTAMongoDBAgentValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = RTAMongoDBAgentValidationError{} @@ -2645,7 +2662,8 @@ func (e QANPostgreSQLPgStatementsAgentValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = QANPostgreSQLPgStatementsAgentValidationError{} @@ -2776,7 +2794,8 @@ func (e QANPostgreSQLPgStatMonitorAgentValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = QANPostgreSQLPgStatMonitorAgentValidationError{} @@ -2932,7 +2951,8 @@ func (e RDSExporterValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = RDSExporterValidationError{} @@ -3087,7 +3107,8 @@ func (e ExternalExporterValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ExternalExporterValidationError{} @@ -3242,7 +3263,8 @@ func (e AzureDatabaseExporterValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AzureDatabaseExporterValidationError{} @@ -3311,7 +3333,6 @@ func (m *ChangeCommonAgentParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -3340,7 +3361,6 @@ func (m *ChangeCommonAgentParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -3414,7 +3434,8 @@ func (e ChangeCommonAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeCommonAgentParamsValidationError{} @@ -3524,7 +3545,8 @@ func (e ListAgentsRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ListAgentsRequestValidationError{} @@ -4306,7 +4328,8 @@ func (e ListAgentsResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ListAgentsResponseValidationError{} @@ -4417,7 +4440,8 @@ func (e GetAgentRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetAgentRequestValidationError{} @@ -5342,7 +5366,8 @@ func (e GetAgentResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetAgentResponseValidationError{} @@ -5457,7 +5482,8 @@ func (e GetAgentLogsRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetAgentLogsRequestValidationError{} @@ -5561,7 +5587,8 @@ func (e GetAgentLogsResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetAgentLogsResponseValidationError{} @@ -6363,7 +6390,8 @@ func (e AddAgentRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddAgentRequestValidationError{} @@ -7165,7 +7193,8 @@ func (e AddAgentResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddAgentResponseValidationError{} @@ -7980,7 +8009,8 @@ func (e ChangeAgentRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeAgentRequestValidationError{} @@ -8784,7 +8814,8 @@ func (e ChangeAgentResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeAgentResponseValidationError{} @@ -8899,7 +8930,8 @@ func (e AddPMMAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddPMMAgentParamsValidationError{} @@ -9020,7 +9052,8 @@ func (e AddNodeExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddNodeExporterParamsValidationError{} @@ -9089,7 +9122,6 @@ func (m *ChangeNodeExporterParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -9118,7 +9150,6 @@ func (m *ChangeNodeExporterParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -9200,7 +9231,8 @@ func (e ChangeNodeExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeNodeExporterParamsValidationError{} @@ -9393,7 +9425,8 @@ func (e AddMySQLdExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddMySQLdExporterParamsValidationError{} @@ -9492,7 +9525,6 @@ func (m *ChangeMySQLdExporterParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -9521,7 +9553,6 @@ func (m *ChangeMySQLdExporterParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -9643,7 +9674,8 @@ func (e ChangeMySQLdExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeMySQLdExporterParamsValidationError{} @@ -9831,7 +9863,8 @@ func (e AddMongoDBExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddMongoDBExporterParamsValidationError{} @@ -9930,7 +9963,6 @@ func (m *ChangeMongoDBExporterParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -9959,7 +9991,6 @@ func (m *ChangeMongoDBExporterParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -10094,7 +10125,8 @@ func (e ChangeMongoDBExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeMongoDBExporterParamsValidationError{} @@ -10287,7 +10319,8 @@ func (e AddPostgresExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddPostgresExporterParamsValidationError{} @@ -10386,7 +10419,6 @@ func (m *ChangePostgresExporterParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -10415,7 +10447,6 @@ func (m *ChangePostgresExporterParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -10542,7 +10573,8 @@ func (e ChangePostgresExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangePostgresExporterParamsValidationError{} @@ -10725,7 +10757,8 @@ func (e AddProxySQLExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddProxySQLExporterParamsValidationError{} @@ -10824,7 +10857,6 @@ func (m *ChangeProxySQLExporterParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -10853,7 +10885,6 @@ func (m *ChangeProxySQLExporterParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -10956,7 +10987,8 @@ func (e ChangeProxySQLExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeProxySQLExporterParamsValidationError{} @@ -11120,7 +11152,8 @@ func (e AddQANMySQLPerfSchemaAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddQANMySQLPerfSchemaAgentParamsValidationError{} @@ -11190,7 +11223,6 @@ func (m *ChangeQANMySQLPerfSchemaAgentParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -11219,7 +11251,6 @@ func (m *ChangeQANMySQLPerfSchemaAgentParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -11343,7 +11374,8 @@ func (e ChangeQANMySQLPerfSchemaAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeQANMySQLPerfSchemaAgentParamsValidationError{} @@ -11507,7 +11539,8 @@ func (e AddQANMySQLSlowlogAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddQANMySQLSlowlogAgentParamsValidationError{} @@ -11577,7 +11610,6 @@ func (m *ChangeQANMySQLSlowlogAgentParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -11606,7 +11638,6 @@ func (m *ChangeQANMySQLSlowlogAgentParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -11734,7 +11765,8 @@ func (e ChangeQANMySQLSlowlogAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeQANMySQLSlowlogAgentParamsValidationError{} @@ -11887,7 +11919,8 @@ func (e AddQANMongoDBProfilerAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddQANMongoDBProfilerAgentParamsValidationError{} @@ -11957,7 +11990,6 @@ func (m *ChangeQANMongoDBProfilerAgentParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -11986,7 +12018,6 @@ func (m *ChangeQANMongoDBProfilerAgentParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -12106,7 +12137,8 @@ func (e ChangeQANMongoDBProfilerAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeQANMongoDBProfilerAgentParamsValidationError{} @@ -12259,7 +12291,8 @@ func (e AddQANMongoDBMongologAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddQANMongoDBMongologAgentParamsValidationError{} @@ -12329,7 +12362,6 @@ func (m *ChangeQANMongoDBMongologAgentParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -12358,7 +12390,6 @@ func (m *ChangeQANMongoDBMongologAgentParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -12478,7 +12509,8 @@ func (e ChangeQANMongoDBMongologAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeQANMongoDBMongologAgentParamsValidationError{} @@ -12639,7 +12671,8 @@ func (e AddQANPostgreSQLPgStatementsAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddQANPostgreSQLPgStatementsAgentParamsValidationError{} @@ -12710,7 +12743,6 @@ func (m *ChangeQANPostgreSQLPgStatementsAgentParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -12739,7 +12771,6 @@ func (m *ChangeQANPostgreSQLPgStatementsAgentParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -12855,7 +12886,8 @@ func (e ChangeQANPostgreSQLPgStatementsAgentParamsValidationError) Error() strin key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeQANPostgreSQLPgStatementsAgentParamsValidationError{} @@ -13018,7 +13050,8 @@ func (e AddQANPostgreSQLPgStatMonitorAgentParamsValidationError) Error() string key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddQANPostgreSQLPgStatMonitorAgentParamsValidationError{} @@ -13089,7 +13122,6 @@ func (m *ChangeQANPostgreSQLPgStatMonitorAgentParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -13118,7 +13150,6 @@ func (m *ChangeQANPostgreSQLPgStatMonitorAgentParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -13238,7 +13269,8 @@ func (e ChangeQANPostgreSQLPgStatMonitorAgentParamsValidationError) Error() stri key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeQANPostgreSQLPgStatMonitorAgentParamsValidationError{} @@ -13378,7 +13410,8 @@ func (e AddRDSExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddRDSExporterParamsValidationError{} @@ -13447,7 +13480,6 @@ func (m *ChangeRDSExporterParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -13476,7 +13508,6 @@ func (m *ChangeRDSExporterParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -13570,7 +13601,8 @@ func (e ChangeRDSExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeRDSExporterParamsValidationError{} @@ -13710,7 +13742,8 @@ func (e AddExternalExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddExternalExporterParamsValidationError{} @@ -13779,7 +13812,6 @@ func (m *ChangeExternalExporterParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -13808,7 +13840,6 @@ func (m *ChangeExternalExporterParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -13899,7 +13930,8 @@ func (e ChangeExternalExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeExternalExporterParamsValidationError{} @@ -14053,7 +14085,8 @@ func (e AddAzureDatabaseExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddAzureDatabaseExporterParamsValidationError{} @@ -14123,7 +14156,6 @@ func (m *ChangeAzureDatabaseExporterParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -14152,7 +14184,6 @@ func (m *ChangeAzureDatabaseExporterParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -14252,7 +14283,8 @@ func (e ChangeAzureDatabaseExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeAzureDatabaseExporterParamsValidationError{} @@ -14358,7 +14390,8 @@ func (e ChangeNomadAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeNomadAgentParamsValidationError{} @@ -14556,7 +14589,8 @@ func (e AddValkeyExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddValkeyExporterParamsValidationError{} @@ -14655,7 +14689,6 @@ func (m *ChangeValkeyExporterParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -14684,7 +14717,6 @@ func (m *ChangeValkeyExporterParams) validate(all bool) error { } } } - } if m.EnablePushMetrics != nil { @@ -14692,7 +14724,6 @@ func (m *ChangeValkeyExporterParams) validate(all bool) error { } if m.Username != nil { - if utf8.RuneCountInString(m.GetUsername()) < 1 { err := ChangeValkeyExporterParamsValidationError{ field: "Username", @@ -14703,7 +14734,6 @@ func (m *ChangeValkeyExporterParams) validate(all bool) error { } errors = append(errors, err) } - } if m.Password != nil { @@ -14809,7 +14839,8 @@ func (e ChangeValkeyExporterParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeValkeyExporterParamsValidationError{} @@ -14984,7 +15015,8 @@ func (e AddRTAMongoDBAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddRTAMongoDBAgentParamsValidationError{} @@ -15024,7 +15056,6 @@ func (m *ChangeRTAMongoDBAgentParams) validate(all bool) error { } if m.CustomLabels != nil { - if all { switch v := interface{}(m.GetCustomLabels()).(type) { case interface{ ValidateAll() error }: @@ -15053,7 +15084,6 @@ func (m *ChangeRTAMongoDBAgentParams) validate(all bool) error { } } } - } if m.LogLevel != nil { @@ -15093,7 +15123,6 @@ func (m *ChangeRTAMongoDBAgentParams) validate(all bool) error { } if m.RtaOptions != nil { - if all { switch v := interface{}(m.GetRtaOptions()).(type) { case interface{ ValidateAll() error }: @@ -15122,7 +15151,6 @@ func (m *ChangeRTAMongoDBAgentParams) validate(all bool) error { } } } - } if len(errors) > 0 { @@ -15193,7 +15221,8 @@ func (e ChangeRTAMongoDBAgentParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeRTAMongoDBAgentParamsValidationError{} @@ -15308,7 +15337,8 @@ func (e RemoveAgentRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = RemoveAgentRequestValidationError{} @@ -15410,7 +15440,8 @@ func (e RemoveAgentResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = RemoveAgentResponseValidationError{} diff --git a/api/inventory/v1/json/client/agents_service/get_agent_responses.go b/api/inventory/v1/json/client/agents_service/get_agent_responses.go index 9f4fc725525..89c9b7a44fe 100644 --- a/api/inventory/v1/json/client/agents_service/get_agent_responses.go +++ b/api/inventory/v1/json/client/agents_service/get_agent_responses.go @@ -421,6 +421,9 @@ type GetAgentOKBody struct { // azure database exporter AzureDatabaseExporter *GetAgentOKBodyAzureDatabaseExporter `json:"azure_database_exporter,omitempty"` + // db log watcher agent + DBLogWatcherAgent *GetAgentOKBodyDBLogWatcherAgent `json:"db_log_watcher_agent,omitempty"` + // external exporter ExternalExporter *GetAgentOKBodyExternalExporter `json:"external_exporter,omitempty"` @@ -484,6 +487,10 @@ func (o *GetAgentOKBody) Validate(formats strfmt.Registry) error { res = append(res, err) } + if err := o.validateDBLogWatcherAgent(formats); err != nil { + res = append(res, err) + } + if err := o.validateExternalExporter(formats); err != nil { res = append(res, err) } @@ -585,6 +592,29 @@ func (o *GetAgentOKBody) validateAzureDatabaseExporter(formats strfmt.Registry) return nil } +func (o *GetAgentOKBody) validateDBLogWatcherAgent(formats strfmt.Registry) error { + if swag.IsZero(o.DBLogWatcherAgent) { // not required + return nil + } + + if o.DBLogWatcherAgent != nil { + if err := o.DBLogWatcherAgent.Validate(formats); err != nil { + ve := new(errors.Validation) + if stderrors.As(err, &ve) { + return ve.ValidateName("getAgentOk" + "." + "db_log_watcher_agent") + } + ce := new(errors.CompositeError) + if stderrors.As(err, &ce) { + return ce.ValidateName("getAgentOk" + "." + "db_log_watcher_agent") + } + + return err + } + } + + return nil +} + func (o *GetAgentOKBody) validateExternalExporter(formats strfmt.Registry) error { if swag.IsZero(o.ExternalExporter) { // not required return nil @@ -1007,6 +1037,10 @@ func (o *GetAgentOKBody) ContextValidate(ctx context.Context, formats strfmt.Reg res = append(res, err) } + if err := o.contextValidateDBLogWatcherAgent(ctx, formats); err != nil { + res = append(res, err) + } + if err := o.contextValidateExternalExporter(ctx, formats); err != nil { res = append(res, err) } @@ -1109,6 +1143,30 @@ func (o *GetAgentOKBody) contextValidateAzureDatabaseExporter(ctx context.Contex return nil } +func (o *GetAgentOKBody) contextValidateDBLogWatcherAgent(ctx context.Context, formats strfmt.Registry) error { + if o.DBLogWatcherAgent != nil { + + if swag.IsZero(o.DBLogWatcherAgent) { // not required + return nil + } + + if err := o.DBLogWatcherAgent.ContextValidate(ctx, formats); err != nil { + ve := new(errors.Validation) + if stderrors.As(err, &ve) { + return ve.ValidateName("getAgentOk" + "." + "db_log_watcher_agent") + } + ce := new(errors.CompositeError) + if stderrors.As(err, &ce) { + return ce.ValidateName("getAgentOk" + "." + "db_log_watcher_agent") + } + + return err + } + } + + return nil +} + func (o *GetAgentOKBody) contextValidateExternalExporter(ctx context.Context, formats strfmt.Registry) error { if o.ExternalExporter != nil { @@ -1874,6 +1932,318 @@ func (o *GetAgentOKBodyAzureDatabaseExporterMetricsResolutions) UnmarshalBinary( return nil } +/* +GetAgentOKBodyDBLogWatcherAgent DBLogWatcherAgent runs within pmm-agent and ships watched database log files to the PMM Server. +swagger:model GetAgentOKBodyDBLogWatcherAgent +*/ +type GetAgentOKBodyDBLogWatcherAgent struct { + // Unique randomly generated instance identifier. + AgentID string `json:"agent_id,omitempty"` + + // The pmm-agent identifier which runs this instance. + PMMAgentID string `json:"pmm_agent_id,omitempty"` + + // Desired Agent status: enabled (false) or disabled (true). + Disabled bool `json:"disabled,omitempty"` + + // Service identifier. + ServiceID string `json:"service_id,omitempty"` + + // Database engine: mysql, postgresql, mongodb, valkey or redis. + DBSystem string `json:"db_system,omitempty"` + + // Log files being watched and shipped. + WatchedLogs []*GetAgentOKBodyDBLogWatcherAgentWatchedLogsItems0 `json:"watched_logs"` + + // Custom user-assigned labels. + CustomLabels map[string]string `json:"custom_labels,omitempty"` + + // AgentStatus represents actual Agent status. + // + // - AGENT_STATUS_STARTING: Agent is starting. + // - AGENT_STATUS_INITIALIZATION_ERROR: Agent encountered error when starting. + // - AGENT_STATUS_RUNNING: Agent is running. + // - AGENT_STATUS_WAITING: Agent encountered error and will be restarted automatically soon. + // - AGENT_STATUS_STOPPING: Agent is stopping. + // - AGENT_STATUS_DONE: Agent has been stopped or disabled. + // - AGENT_STATUS_UNKNOWN: Agent is not connected, we don't know anything about it's state. + // Enum: ["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"] + Status *string `json:"status,omitempty"` + + // process exec path + ProcessExecPath string `json:"process_exec_path,omitempty"` + + // Log level for exporters + // + // - LOG_LEVEL_UNSPECIFIED: Auto + // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] + LogLevel *string `json:"log_level,omitempty"` +} + +// Validate validates this get agent OK body DB log watcher agent +func (o *GetAgentOKBodyDBLogWatcherAgent) Validate(formats strfmt.Registry) error { + var res []error + + if err := o.validateWatchedLogs(formats); err != nil { + res = append(res, err) + } + + if err := o.validateStatus(formats); err != nil { + res = append(res, err) + } + + if err := o.validateLogLevel(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *GetAgentOKBodyDBLogWatcherAgent) validateWatchedLogs(formats strfmt.Registry) error { + if swag.IsZero(o.WatchedLogs) { // not required + return nil + } + + for i := 0; i < len(o.WatchedLogs); i++ { + if swag.IsZero(o.WatchedLogs[i]) { // not required + continue + } + + if o.WatchedLogs[i] != nil { + if err := o.WatchedLogs[i].Validate(formats); err != nil { + ve := new(errors.Validation) + if stderrors.As(err, &ve) { + return ve.ValidateName("getAgentOk" + "." + "db_log_watcher_agent" + "." + "watched_logs" + "." + strconv.Itoa(i)) + } + ce := new(errors.CompositeError) + if stderrors.As(err, &ce) { + return ce.ValidateName("getAgentOk" + "." + "db_log_watcher_agent" + "." + "watched_logs" + "." + strconv.Itoa(i)) + } + + return err + } + } + + } + + return nil +} + +var getAgentOkBodyDbLogWatcherAgentTypeStatusPropEnum []any + +func init() { + var res []string + if err := json.Unmarshal([]byte(`["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"]`), &res); err != nil { + panic(err) + } + for _, v := range res { + getAgentOkBodyDbLogWatcherAgentTypeStatusPropEnum = append(getAgentOkBodyDbLogWatcherAgentTypeStatusPropEnum, v) + } +} + +const ( + + // GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSUNSPECIFIED captures enum value "AGENT_STATUS_UNSPECIFIED" + GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSUNSPECIFIED string = "AGENT_STATUS_UNSPECIFIED" + + // GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSSTARTING captures enum value "AGENT_STATUS_STARTING" + GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSSTARTING string = "AGENT_STATUS_STARTING" + + // GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSINITIALIZATIONERROR captures enum value "AGENT_STATUS_INITIALIZATION_ERROR" + GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSINITIALIZATIONERROR string = "AGENT_STATUS_INITIALIZATION_ERROR" + + // GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSRUNNING captures enum value "AGENT_STATUS_RUNNING" + GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSRUNNING string = "AGENT_STATUS_RUNNING" + + // GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSWAITING captures enum value "AGENT_STATUS_WAITING" + GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSWAITING string = "AGENT_STATUS_WAITING" + + // GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSSTOPPING captures enum value "AGENT_STATUS_STOPPING" + GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSSTOPPING string = "AGENT_STATUS_STOPPING" + + // GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSDONE captures enum value "AGENT_STATUS_DONE" + GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSDONE string = "AGENT_STATUS_DONE" + + // GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSUNKNOWN captures enum value "AGENT_STATUS_UNKNOWN" + GetAgentOKBodyDBLogWatcherAgentStatusAGENTSTATUSUNKNOWN string = "AGENT_STATUS_UNKNOWN" +) + +// prop value enum +func (o *GetAgentOKBodyDBLogWatcherAgent) validateStatusEnum(path, location string, value string) error { + if err := validate.EnumCase(path, location, value, getAgentOkBodyDbLogWatcherAgentTypeStatusPropEnum, true); err != nil { + return err + } + return nil +} + +func (o *GetAgentOKBodyDBLogWatcherAgent) validateStatus(formats strfmt.Registry) error { + if swag.IsZero(o.Status) { // not required + return nil + } + + // value enum + if err := o.validateStatusEnum("getAgentOk"+"."+"db_log_watcher_agent"+"."+"status", "body", *o.Status); err != nil { + return err + } + + return nil +} + +var getAgentOkBodyDbLogWatcherAgentTypeLogLevelPropEnum []any + +func init() { + var res []string + if err := json.Unmarshal([]byte(`["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"]`), &res); err != nil { + panic(err) + } + for _, v := range res { + getAgentOkBodyDbLogWatcherAgentTypeLogLevelPropEnum = append(getAgentOkBodyDbLogWatcherAgentTypeLogLevelPropEnum, v) + } +} + +const ( + + // GetAgentOKBodyDBLogWatcherAgentLogLevelLOGLEVELUNSPECIFIED captures enum value "LOG_LEVEL_UNSPECIFIED" + GetAgentOKBodyDBLogWatcherAgentLogLevelLOGLEVELUNSPECIFIED string = "LOG_LEVEL_UNSPECIFIED" + + // GetAgentOKBodyDBLogWatcherAgentLogLevelLOGLEVELFATAL captures enum value "LOG_LEVEL_FATAL" + GetAgentOKBodyDBLogWatcherAgentLogLevelLOGLEVELFATAL string = "LOG_LEVEL_FATAL" + + // GetAgentOKBodyDBLogWatcherAgentLogLevelLOGLEVELERROR captures enum value "LOG_LEVEL_ERROR" + GetAgentOKBodyDBLogWatcherAgentLogLevelLOGLEVELERROR string = "LOG_LEVEL_ERROR" + + // GetAgentOKBodyDBLogWatcherAgentLogLevelLOGLEVELWARN captures enum value "LOG_LEVEL_WARN" + GetAgentOKBodyDBLogWatcherAgentLogLevelLOGLEVELWARN string = "LOG_LEVEL_WARN" + + // GetAgentOKBodyDBLogWatcherAgentLogLevelLOGLEVELINFO captures enum value "LOG_LEVEL_INFO" + GetAgentOKBodyDBLogWatcherAgentLogLevelLOGLEVELINFO string = "LOG_LEVEL_INFO" + + // GetAgentOKBodyDBLogWatcherAgentLogLevelLOGLEVELDEBUG captures enum value "LOG_LEVEL_DEBUG" + GetAgentOKBodyDBLogWatcherAgentLogLevelLOGLEVELDEBUG string = "LOG_LEVEL_DEBUG" +) + +// prop value enum +func (o *GetAgentOKBodyDBLogWatcherAgent) validateLogLevelEnum(path, location string, value string) error { + if err := validate.EnumCase(path, location, value, getAgentOkBodyDbLogWatcherAgentTypeLogLevelPropEnum, true); err != nil { + return err + } + return nil +} + +func (o *GetAgentOKBodyDBLogWatcherAgent) validateLogLevel(formats strfmt.Registry) error { + if swag.IsZero(o.LogLevel) { // not required + return nil + } + + // value enum + if err := o.validateLogLevelEnum("getAgentOk"+"."+"db_log_watcher_agent"+"."+"log_level", "body", *o.LogLevel); err != nil { + return err + } + + return nil +} + +// ContextValidate validate this get agent OK body DB log watcher agent based on the context it is used +func (o *GetAgentOKBodyDBLogWatcherAgent) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := o.contextValidateWatchedLogs(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *GetAgentOKBodyDBLogWatcherAgent) contextValidateWatchedLogs(ctx context.Context, formats strfmt.Registry) error { + for i := 0; i < len(o.WatchedLogs); i++ { + if o.WatchedLogs[i] != nil { + + if swag.IsZero(o.WatchedLogs[i]) { // not required + return nil + } + + if err := o.WatchedLogs[i].ContextValidate(ctx, formats); err != nil { + ve := new(errors.Validation) + if stderrors.As(err, &ve) { + return ve.ValidateName("getAgentOk" + "." + "db_log_watcher_agent" + "." + "watched_logs" + "." + strconv.Itoa(i)) + } + ce := new(errors.CompositeError) + if stderrors.As(err, &ce) { + return ce.ValidateName("getAgentOk" + "." + "db_log_watcher_agent" + "." + "watched_logs" + "." + strconv.Itoa(i)) + } + + return err + } + } + } + + return nil +} + +// MarshalBinary interface implementation +func (o *GetAgentOKBodyDBLogWatcherAgent) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *GetAgentOKBodyDBLogWatcherAgent) UnmarshalBinary(b []byte) error { + var res GetAgentOKBodyDBLogWatcherAgent + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +GetAgentOKBodyDBLogWatcherAgentWatchedLogsItems0 WatchedLog identifies a single database log file to watch and its type. +swagger:model GetAgentOKBodyDBLogWatcherAgentWatchedLogsItems0 +*/ +type GetAgentOKBodyDBLogWatcherAgentWatchedLogsItems0 struct { + // Absolute path of the log file on the client node. + Path string `json:"path,omitempty"` + + // Log type: error, slow or general. + Type string `json:"type,omitempty"` +} + +// Validate validates this get agent OK body DB log watcher agent watched logs items0 +func (o *GetAgentOKBodyDBLogWatcherAgentWatchedLogsItems0) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this get agent OK body DB log watcher agent watched logs items0 based on context it is used +func (o *GetAgentOKBodyDBLogWatcherAgentWatchedLogsItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *GetAgentOKBodyDBLogWatcherAgentWatchedLogsItems0) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *GetAgentOKBodyDBLogWatcherAgentWatchedLogsItems0) UnmarshalBinary(b []byte) error { + var res GetAgentOKBodyDBLogWatcherAgentWatchedLogsItems0 + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + /* GetAgentOKBodyExternalExporter ExternalExporter runs on any Node type, including Remote Node. swagger:model GetAgentOKBodyExternalExporter diff --git a/api/inventory/v1/json/client/agents_service/list_agents_responses.go b/api/inventory/v1/json/client/agents_service/list_agents_responses.go index 0bffc1a715a..0a8662f17cf 100644 --- a/api/inventory/v1/json/client/agents_service/list_agents_responses.go +++ b/api/inventory/v1/json/client/agents_service/list_agents_responses.go @@ -474,6 +474,9 @@ type ListAgentsOKBody struct { // rta mongodb agent RtaMongodbAgent []*ListAgentsOKBodyRtaMongodbAgentItems0 `json:"rta_mongodb_agent"` + + // db log watcher agent + DBLogWatcherAgent []*ListAgentsOKBodyDBLogWatcherAgentItems0 `json:"db_log_watcher_agent"` } // Validate validates this list agents OK body @@ -556,6 +559,10 @@ func (o *ListAgentsOKBody) Validate(formats strfmt.Registry) error { res = append(res, err) } + if err := o.validateDBLogWatcherAgent(formats); err != nil { + res = append(res, err) + } + if len(res) > 0 { return errors.CompositeValidationError(res...) } @@ -1132,6 +1139,36 @@ func (o *ListAgentsOKBody) validateRtaMongodbAgent(formats strfmt.Registry) erro return nil } +func (o *ListAgentsOKBody) validateDBLogWatcherAgent(formats strfmt.Registry) error { + if swag.IsZero(o.DBLogWatcherAgent) { // not required + return nil + } + + for i := 0; i < len(o.DBLogWatcherAgent); i++ { + if swag.IsZero(o.DBLogWatcherAgent[i]) { // not required + continue + } + + if o.DBLogWatcherAgent[i] != nil { + if err := o.DBLogWatcherAgent[i].Validate(formats); err != nil { + ve := new(errors.Validation) + if stderrors.As(err, &ve) { + return ve.ValidateName("listAgentsOk" + "." + "db_log_watcher_agent" + "." + strconv.Itoa(i)) + } + ce := new(errors.CompositeError) + if stderrors.As(err, &ce) { + return ce.ValidateName("listAgentsOk" + "." + "db_log_watcher_agent" + "." + strconv.Itoa(i)) + } + + return err + } + } + + } + + return nil +} + // ContextValidate validate this list agents OK body based on the context it is used func (o *ListAgentsOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error @@ -1212,6 +1249,10 @@ func (o *ListAgentsOKBody) ContextValidate(ctx context.Context, formats strfmt.R res = append(res, err) } + if err := o.contextValidateDBLogWatcherAgent(ctx, formats); err != nil { + res = append(res, err) + } + if len(res) > 0 { return errors.CompositeValidationError(res...) } @@ -1712,6 +1753,32 @@ func (o *ListAgentsOKBody) contextValidateRtaMongodbAgent(ctx context.Context, f return nil } +func (o *ListAgentsOKBody) contextValidateDBLogWatcherAgent(ctx context.Context, formats strfmt.Registry) error { + for i := 0; i < len(o.DBLogWatcherAgent); i++ { + if o.DBLogWatcherAgent[i] != nil { + + if swag.IsZero(o.DBLogWatcherAgent[i]) { // not required + return nil + } + + if err := o.DBLogWatcherAgent[i].ContextValidate(ctx, formats); err != nil { + ve := new(errors.Validation) + if stderrors.As(err, &ve) { + return ve.ValidateName("listAgentsOk" + "." + "db_log_watcher_agent" + "." + strconv.Itoa(i)) + } + ce := new(errors.CompositeError) + if stderrors.As(err, &ce) { + return ce.ValidateName("listAgentsOk" + "." + "db_log_watcher_agent" + "." + strconv.Itoa(i)) + } + + return err + } + } + } + + return nil +} + // MarshalBinary interface implementation func (o *ListAgentsOKBody) MarshalBinary() ([]byte, error) { if o == nil { @@ -2045,6 +2112,318 @@ func (o *ListAgentsOKBodyAzureDatabaseExporterItems0MetricsResolutions) Unmarsha return nil } +/* +ListAgentsOKBodyDBLogWatcherAgentItems0 DBLogWatcherAgent runs within pmm-agent and ships watched database log files to the PMM Server. +swagger:model ListAgentsOKBodyDBLogWatcherAgentItems0 +*/ +type ListAgentsOKBodyDBLogWatcherAgentItems0 struct { + // Unique randomly generated instance identifier. + AgentID string `json:"agent_id,omitempty"` + + // The pmm-agent identifier which runs this instance. + PMMAgentID string `json:"pmm_agent_id,omitempty"` + + // Desired Agent status: enabled (false) or disabled (true). + Disabled bool `json:"disabled,omitempty"` + + // Service identifier. + ServiceID string `json:"service_id,omitempty"` + + // Database engine: mysql, postgresql, mongodb, valkey or redis. + DBSystem string `json:"db_system,omitempty"` + + // Log files being watched and shipped. + WatchedLogs []*ListAgentsOKBodyDBLogWatcherAgentItems0WatchedLogsItems0 `json:"watched_logs"` + + // Custom user-assigned labels. + CustomLabels map[string]string `json:"custom_labels,omitempty"` + + // AgentStatus represents actual Agent status. + // + // - AGENT_STATUS_STARTING: Agent is starting. + // - AGENT_STATUS_INITIALIZATION_ERROR: Agent encountered error when starting. + // - AGENT_STATUS_RUNNING: Agent is running. + // - AGENT_STATUS_WAITING: Agent encountered error and will be restarted automatically soon. + // - AGENT_STATUS_STOPPING: Agent is stopping. + // - AGENT_STATUS_DONE: Agent has been stopped or disabled. + // - AGENT_STATUS_UNKNOWN: Agent is not connected, we don't know anything about it's state. + // Enum: ["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"] + Status *string `json:"status,omitempty"` + + // process exec path + ProcessExecPath string `json:"process_exec_path,omitempty"` + + // Log level for exporters + // + // - LOG_LEVEL_UNSPECIFIED: Auto + // Enum: ["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"] + LogLevel *string `json:"log_level,omitempty"` +} + +// Validate validates this list agents OK body DB log watcher agent items0 +func (o *ListAgentsOKBodyDBLogWatcherAgentItems0) Validate(formats strfmt.Registry) error { + var res []error + + if err := o.validateWatchedLogs(formats); err != nil { + res = append(res, err) + } + + if err := o.validateStatus(formats); err != nil { + res = append(res, err) + } + + if err := o.validateLogLevel(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *ListAgentsOKBodyDBLogWatcherAgentItems0) validateWatchedLogs(formats strfmt.Registry) error { + if swag.IsZero(o.WatchedLogs) { // not required + return nil + } + + for i := 0; i < len(o.WatchedLogs); i++ { + if swag.IsZero(o.WatchedLogs[i]) { // not required + continue + } + + if o.WatchedLogs[i] != nil { + if err := o.WatchedLogs[i].Validate(formats); err != nil { + ve := new(errors.Validation) + if stderrors.As(err, &ve) { + return ve.ValidateName("watched_logs" + "." + strconv.Itoa(i)) + } + ce := new(errors.CompositeError) + if stderrors.As(err, &ce) { + return ce.ValidateName("watched_logs" + "." + strconv.Itoa(i)) + } + + return err + } + } + + } + + return nil +} + +var listAgentsOkBodyDbLogWatcherAgentItems0TypeStatusPropEnum []any + +func init() { + var res []string + if err := json.Unmarshal([]byte(`["AGENT_STATUS_UNSPECIFIED","AGENT_STATUS_STARTING","AGENT_STATUS_INITIALIZATION_ERROR","AGENT_STATUS_RUNNING","AGENT_STATUS_WAITING","AGENT_STATUS_STOPPING","AGENT_STATUS_DONE","AGENT_STATUS_UNKNOWN"]`), &res); err != nil { + panic(err) + } + for _, v := range res { + listAgentsOkBodyDbLogWatcherAgentItems0TypeStatusPropEnum = append(listAgentsOkBodyDbLogWatcherAgentItems0TypeStatusPropEnum, v) + } +} + +const ( + + // ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSUNSPECIFIED captures enum value "AGENT_STATUS_UNSPECIFIED" + ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSUNSPECIFIED string = "AGENT_STATUS_UNSPECIFIED" + + // ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSSTARTING captures enum value "AGENT_STATUS_STARTING" + ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSSTARTING string = "AGENT_STATUS_STARTING" + + // ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSINITIALIZATIONERROR captures enum value "AGENT_STATUS_INITIALIZATION_ERROR" + ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSINITIALIZATIONERROR string = "AGENT_STATUS_INITIALIZATION_ERROR" + + // ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSRUNNING captures enum value "AGENT_STATUS_RUNNING" + ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSRUNNING string = "AGENT_STATUS_RUNNING" + + // ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSWAITING captures enum value "AGENT_STATUS_WAITING" + ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSWAITING string = "AGENT_STATUS_WAITING" + + // ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSSTOPPING captures enum value "AGENT_STATUS_STOPPING" + ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSSTOPPING string = "AGENT_STATUS_STOPPING" + + // ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSDONE captures enum value "AGENT_STATUS_DONE" + ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSDONE string = "AGENT_STATUS_DONE" + + // ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSUNKNOWN captures enum value "AGENT_STATUS_UNKNOWN" + ListAgentsOKBodyDBLogWatcherAgentItems0StatusAGENTSTATUSUNKNOWN string = "AGENT_STATUS_UNKNOWN" +) + +// prop value enum +func (o *ListAgentsOKBodyDBLogWatcherAgentItems0) validateStatusEnum(path, location string, value string) error { + if err := validate.EnumCase(path, location, value, listAgentsOkBodyDbLogWatcherAgentItems0TypeStatusPropEnum, true); err != nil { + return err + } + return nil +} + +func (o *ListAgentsOKBodyDBLogWatcherAgentItems0) validateStatus(formats strfmt.Registry) error { + if swag.IsZero(o.Status) { // not required + return nil + } + + // value enum + if err := o.validateStatusEnum("status", "body", *o.Status); err != nil { + return err + } + + return nil +} + +var listAgentsOkBodyDbLogWatcherAgentItems0TypeLogLevelPropEnum []any + +func init() { + var res []string + if err := json.Unmarshal([]byte(`["LOG_LEVEL_UNSPECIFIED","LOG_LEVEL_FATAL","LOG_LEVEL_ERROR","LOG_LEVEL_WARN","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG"]`), &res); err != nil { + panic(err) + } + for _, v := range res { + listAgentsOkBodyDbLogWatcherAgentItems0TypeLogLevelPropEnum = append(listAgentsOkBodyDbLogWatcherAgentItems0TypeLogLevelPropEnum, v) + } +} + +const ( + + // ListAgentsOKBodyDBLogWatcherAgentItems0LogLevelLOGLEVELUNSPECIFIED captures enum value "LOG_LEVEL_UNSPECIFIED" + ListAgentsOKBodyDBLogWatcherAgentItems0LogLevelLOGLEVELUNSPECIFIED string = "LOG_LEVEL_UNSPECIFIED" + + // ListAgentsOKBodyDBLogWatcherAgentItems0LogLevelLOGLEVELFATAL captures enum value "LOG_LEVEL_FATAL" + ListAgentsOKBodyDBLogWatcherAgentItems0LogLevelLOGLEVELFATAL string = "LOG_LEVEL_FATAL" + + // ListAgentsOKBodyDBLogWatcherAgentItems0LogLevelLOGLEVELERROR captures enum value "LOG_LEVEL_ERROR" + ListAgentsOKBodyDBLogWatcherAgentItems0LogLevelLOGLEVELERROR string = "LOG_LEVEL_ERROR" + + // ListAgentsOKBodyDBLogWatcherAgentItems0LogLevelLOGLEVELWARN captures enum value "LOG_LEVEL_WARN" + ListAgentsOKBodyDBLogWatcherAgentItems0LogLevelLOGLEVELWARN string = "LOG_LEVEL_WARN" + + // ListAgentsOKBodyDBLogWatcherAgentItems0LogLevelLOGLEVELINFO captures enum value "LOG_LEVEL_INFO" + ListAgentsOKBodyDBLogWatcherAgentItems0LogLevelLOGLEVELINFO string = "LOG_LEVEL_INFO" + + // ListAgentsOKBodyDBLogWatcherAgentItems0LogLevelLOGLEVELDEBUG captures enum value "LOG_LEVEL_DEBUG" + ListAgentsOKBodyDBLogWatcherAgentItems0LogLevelLOGLEVELDEBUG string = "LOG_LEVEL_DEBUG" +) + +// prop value enum +func (o *ListAgentsOKBodyDBLogWatcherAgentItems0) validateLogLevelEnum(path, location string, value string) error { + if err := validate.EnumCase(path, location, value, listAgentsOkBodyDbLogWatcherAgentItems0TypeLogLevelPropEnum, true); err != nil { + return err + } + return nil +} + +func (o *ListAgentsOKBodyDBLogWatcherAgentItems0) validateLogLevel(formats strfmt.Registry) error { + if swag.IsZero(o.LogLevel) { // not required + return nil + } + + // value enum + if err := o.validateLogLevelEnum("log_level", "body", *o.LogLevel); err != nil { + return err + } + + return nil +} + +// ContextValidate validate this list agents OK body DB log watcher agent items0 based on the context it is used +func (o *ListAgentsOKBodyDBLogWatcherAgentItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := o.contextValidateWatchedLogs(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *ListAgentsOKBodyDBLogWatcherAgentItems0) contextValidateWatchedLogs(ctx context.Context, formats strfmt.Registry) error { + for i := 0; i < len(o.WatchedLogs); i++ { + if o.WatchedLogs[i] != nil { + + if swag.IsZero(o.WatchedLogs[i]) { // not required + return nil + } + + if err := o.WatchedLogs[i].ContextValidate(ctx, formats); err != nil { + ve := new(errors.Validation) + if stderrors.As(err, &ve) { + return ve.ValidateName("watched_logs" + "." + strconv.Itoa(i)) + } + ce := new(errors.CompositeError) + if stderrors.As(err, &ce) { + return ce.ValidateName("watched_logs" + "." + strconv.Itoa(i)) + } + + return err + } + } + } + + return nil +} + +// MarshalBinary interface implementation +func (o *ListAgentsOKBodyDBLogWatcherAgentItems0) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ListAgentsOKBodyDBLogWatcherAgentItems0) UnmarshalBinary(b []byte) error { + var res ListAgentsOKBodyDBLogWatcherAgentItems0 + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +ListAgentsOKBodyDBLogWatcherAgentItems0WatchedLogsItems0 WatchedLog identifies a single database log file to watch and its type. +swagger:model ListAgentsOKBodyDBLogWatcherAgentItems0WatchedLogsItems0 +*/ +type ListAgentsOKBodyDBLogWatcherAgentItems0WatchedLogsItems0 struct { + // Absolute path of the log file on the client node. + Path string `json:"path,omitempty"` + + // Log type: error, slow or general. + Type string `json:"type,omitempty"` +} + +// Validate validates this list agents OK body DB log watcher agent items0 watched logs items0 +func (o *ListAgentsOKBodyDBLogWatcherAgentItems0WatchedLogsItems0) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this list agents OK body DB log watcher agent items0 watched logs items0 based on context it is used +func (o *ListAgentsOKBodyDBLogWatcherAgentItems0WatchedLogsItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ListAgentsOKBodyDBLogWatcherAgentItems0WatchedLogsItems0) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ListAgentsOKBodyDBLogWatcherAgentItems0WatchedLogsItems0) UnmarshalBinary(b []byte) error { + var res ListAgentsOKBodyDBLogWatcherAgentItems0WatchedLogsItems0 + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + /* ListAgentsOKBodyExternalExporterItems0 ExternalExporter runs on any Node type, including Remote Node. swagger:model ListAgentsOKBodyExternalExporterItems0 diff --git a/api/inventory/v1/json/v1.json b/api/inventory/v1/json/v1.json index 1b0a2395e83..bddbe0b7dd4 100644 --- a/api/inventory/v1/json/v1.json +++ b/api/inventory/v1/json/v1.json @@ -63,7 +63,8 @@ "AGENT_TYPE_RDS_EXPORTER", "AGENT_TYPE_AZURE_DATABASE_EXPORTER", "AGENT_TYPE_NOMAD_AGENT", - "AGENT_TYPE_RTA_MONGODB_AGENT" + "AGENT_TYPE_RTA_MONGODB_AGENT", + "AGENT_TYPE_DB_LOG_WATCHER_AGENT" ], "type": "string", "default": "AGENT_TYPE_UNSPECIFIED", @@ -2202,6 +2203,105 @@ } }, "x-order": 18 + }, + "db_log_watcher_agent": { + "type": "array", + "items": { + "description": "DBLogWatcherAgent runs within pmm-agent and ships watched database log files to the PMM Server.", + "type": "object", + "properties": { + "agent_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "pmm_agent_id": { + "description": "The pmm-agent identifier which runs this instance.", + "type": "string", + "x-order": 1 + }, + "disabled": { + "description": "Desired Agent status: enabled (false) or disabled (true).", + "type": "boolean", + "x-order": 2 + }, + "service_id": { + "description": "Service identifier.", + "type": "string", + "x-order": 3 + }, + "db_system": { + "description": "Database engine: mysql, postgresql, mongodb, valkey or redis.", + "type": "string", + "x-order": 4 + }, + "watched_logs": { + "description": "Log files being watched and shipped.", + "type": "array", + "items": { + "description": "WatchedLog identifies a single database log file to watch and its type.", + "type": "object", + "properties": { + "path": { + "description": "Absolute path of the log file on the client node.", + "type": "string", + "x-order": 0 + }, + "type": { + "description": "Log type: error, slow or general.", + "type": "string", + "x-order": 1 + } + } + }, + "x-order": 5 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 6 + }, + "status": { + "description": "AgentStatus represents actual Agent status.\n\n - AGENT_STATUS_STARTING: Agent is starting.\n - AGENT_STATUS_INITIALIZATION_ERROR: Agent encountered error when starting.\n - AGENT_STATUS_RUNNING: Agent is running.\n - AGENT_STATUS_WAITING: Agent encountered error and will be restarted automatically soon.\n - AGENT_STATUS_STOPPING: Agent is stopping.\n - AGENT_STATUS_DONE: Agent has been stopped or disabled.\n - AGENT_STATUS_UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "type": "string", + "default": "AGENT_STATUS_UNSPECIFIED", + "enum": [ + "AGENT_STATUS_UNSPECIFIED", + "AGENT_STATUS_STARTING", + "AGENT_STATUS_INITIALIZATION_ERROR", + "AGENT_STATUS_RUNNING", + "AGENT_STATUS_WAITING", + "AGENT_STATUS_STOPPING", + "AGENT_STATUS_DONE", + "AGENT_STATUS_UNKNOWN" + ], + "x-order": 7 + }, + "process_exec_path": { + "type": "string", + "x-order": 8 + }, + "log_level": { + "description": "- LOG_LEVEL_UNSPECIFIED: Auto", + "type": "string", + "title": "Log level for exporters", + "default": "LOG_LEVEL_UNSPECIFIED", + "enum": [ + "LOG_LEVEL_UNSPECIFIED", + "LOG_LEVEL_FATAL", + "LOG_LEVEL_ERROR", + "LOG_LEVEL_WARN", + "LOG_LEVEL_INFO", + "LOG_LEVEL_DEBUG" + ], + "x-order": 9 + } + } + }, + "x-order": 19 } } } @@ -7912,6 +8012,102 @@ } }, "x-order": 18 + }, + "db_log_watcher_agent": { + "description": "DBLogWatcherAgent runs within pmm-agent and ships watched database log files to the PMM Server.", + "type": "object", + "properties": { + "agent_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "pmm_agent_id": { + "description": "The pmm-agent identifier which runs this instance.", + "type": "string", + "x-order": 1 + }, + "disabled": { + "description": "Desired Agent status: enabled (false) or disabled (true).", + "type": "boolean", + "x-order": 2 + }, + "service_id": { + "description": "Service identifier.", + "type": "string", + "x-order": 3 + }, + "db_system": { + "description": "Database engine: mysql, postgresql, mongodb, valkey or redis.", + "type": "string", + "x-order": 4 + }, + "watched_logs": { + "description": "Log files being watched and shipped.", + "type": "array", + "items": { + "description": "WatchedLog identifies a single database log file to watch and its type.", + "type": "object", + "properties": { + "path": { + "description": "Absolute path of the log file on the client node.", + "type": "string", + "x-order": 0 + }, + "type": { + "description": "Log type: error, slow or general.", + "type": "string", + "x-order": 1 + } + } + }, + "x-order": 5 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 6 + }, + "status": { + "description": "AgentStatus represents actual Agent status.\n\n - AGENT_STATUS_STARTING: Agent is starting.\n - AGENT_STATUS_INITIALIZATION_ERROR: Agent encountered error when starting.\n - AGENT_STATUS_RUNNING: Agent is running.\n - AGENT_STATUS_WAITING: Agent encountered error and will be restarted automatically soon.\n - AGENT_STATUS_STOPPING: Agent is stopping.\n - AGENT_STATUS_DONE: Agent has been stopped or disabled.\n - AGENT_STATUS_UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "type": "string", + "default": "AGENT_STATUS_UNSPECIFIED", + "enum": [ + "AGENT_STATUS_UNSPECIFIED", + "AGENT_STATUS_STARTING", + "AGENT_STATUS_INITIALIZATION_ERROR", + "AGENT_STATUS_RUNNING", + "AGENT_STATUS_WAITING", + "AGENT_STATUS_STOPPING", + "AGENT_STATUS_DONE", + "AGENT_STATUS_UNKNOWN" + ], + "x-order": 7 + }, + "process_exec_path": { + "type": "string", + "x-order": 8 + }, + "log_level": { + "description": "- LOG_LEVEL_UNSPECIFIED: Auto", + "type": "string", + "title": "Log level for exporters", + "default": "LOG_LEVEL_UNSPECIFIED", + "enum": [ + "LOG_LEVEL_UNSPECIFIED", + "LOG_LEVEL_FATAL", + "LOG_LEVEL_ERROR", + "LOG_LEVEL_WARN", + "LOG_LEVEL_INFO", + "LOG_LEVEL_DEBUG" + ], + "x-order": 9 + } + }, + "x-order": 19 } } } diff --git a/api/inventory/v1/log_level.pb.go b/api/inventory/v1/log_level.pb.go index ff4d79ca3f2..47f0373d578 100644 --- a/api/inventory/v1/log_level.pb.go +++ b/api/inventory/v1/log_level.pb.go @@ -114,7 +114,6 @@ var ( LogLevel(0), // 0: inventory.v1.LogLevel } ) - var file_inventory_v1_log_level_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/inventory/v1/nodes.pb.go b/api/inventory/v1/nodes.pb.go index 447663477a9..e0186c91815 100644 --- a/api/inventory/v1/nodes.pb.go +++ b/api/inventory/v1/nodes.pb.go @@ -2043,7 +2043,6 @@ var ( nil, // 28: inventory.v1.AddRemoteAzureNodeParams.CustomLabelsEntry } ) - var file_inventory_v1_nodes_proto_depIdxs = []int32{ 19, // 0: inventory.v1.GenericNode.custom_labels:type_name -> inventory.v1.GenericNode.CustomLabelsEntry 20, // 1: inventory.v1.ContainerNode.custom_labels:type_name -> inventory.v1.ContainerNode.CustomLabelsEntry diff --git a/api/inventory/v1/services.pb.go b/api/inventory/v1/services.pb.go index a8d1519b61f..23eeeb28b81 100644 --- a/api/inventory/v1/services.pb.go +++ b/api/inventory/v1/services.pb.go @@ -3334,7 +3334,6 @@ var ( (*common.StringMap)(nil), // 43: common.StringMap } ) - var file_inventory_v1_services_proto_depIdxs = []int32{ 27, // 0: inventory.v1.MySQLService.custom_labels:type_name -> inventory.v1.MySQLService.CustomLabelsEntry 28, // 1: inventory.v1.MySQLService.extra_dsn_params:type_name -> inventory.v1.MySQLService.ExtraDsnParamsEntry diff --git a/api/logship/v1/logship.pb.go b/api/logship/v1/logship.pb.go index 7b9ef5ff50e..af4d886bde7 100644 --- a/api/logship/v1/logship.pb.go +++ b/api/logship/v1/logship.pb.go @@ -7,13 +7,14 @@ package logshipv1 import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + _ "google.golang.org/genproto/googleapis/api/visibility" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" - unsafe "unsafe" ) const ( @@ -241,15 +242,17 @@ func file_logship_v1_logship_proto_rawDescGZIP() []byte { return file_logship_v1_logship_proto_rawDescData } -var file_logship_v1_logship_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_logship_v1_logship_proto_goTypes = []any{ - (*LogRecord)(nil), // 0: logship.v1.LogRecord - (*ShipRequest)(nil), // 1: logship.v1.ShipRequest - (*ShipResponse)(nil), // 2: logship.v1.ShipResponse - nil, // 3: logship.v1.LogRecord.AttributesEntry - nil, // 4: logship.v1.ShipRequest.ResourceAttributesEntry - (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp -} +var ( + file_logship_v1_logship_proto_msgTypes = make([]protoimpl.MessageInfo, 5) + file_logship_v1_logship_proto_goTypes = []any{ + (*LogRecord)(nil), // 0: logship.v1.LogRecord + (*ShipRequest)(nil), // 1: logship.v1.ShipRequest + (*ShipResponse)(nil), // 2: logship.v1.ShipResponse + nil, // 3: logship.v1.LogRecord.AttributesEntry + nil, // 4: logship.v1.ShipRequest.ResourceAttributesEntry + (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp + } +) var file_logship_v1_logship_proto_depIdxs = []int32{ 5, // 0: logship.v1.LogRecord.time:type_name -> google.protobuf.Timestamp 3, // 1: logship.v1.LogRecord.attributes:type_name -> logship.v1.LogRecord.AttributesEntry diff --git a/api/logship/v1/logship.pb.validate.go b/api/logship/v1/logship.pb.validate.go index fc8bed457c2..d5a13323ab0 100644 --- a/api/logship/v1/logship.pb.validate.go +++ b/api/logship/v1/logship.pb.validate.go @@ -156,7 +156,8 @@ func (e LogRecordValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = LogRecordValidationError{} @@ -293,7 +294,8 @@ func (e ShipRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ShipRequestValidationError{} @@ -392,7 +394,8 @@ func (e ShipResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ShipResponseValidationError{} diff --git a/api/logship/v1/logship_grpc.pb.go b/api/logship/v1/logship_grpc.pb.go index 75edd987d54..922e18f903b 100644 --- a/api/logship/v1/logship_grpc.pb.go +++ b/api/logship/v1/logship_grpc.pb.go @@ -8,6 +8,7 @@ package logshipv1 import ( context "context" + grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/api/management/v1/agent.pb.go b/api/management/v1/agent.pb.go index c76c750f869..8a745a48910 100644 --- a/api/management/v1/agent.pb.go +++ b/api/management/v1/agent.pb.go @@ -1241,7 +1241,6 @@ var ( (*durationpb.Duration)(nil), // 17: google.protobuf.Duration } ) - var file_management_v1_agent_proto_depIdxs = []int32{ 8, // 0: management.v1.UniversalAgent.azure_options:type_name -> management.v1.UniversalAgent.AzureOptions 14, // 1: management.v1.UniversalAgent.created_at:type_name -> google.protobuf.Timestamp diff --git a/api/management/v1/annotation.pb.go b/api/management/v1/annotation.pb.go index ec781561e4c..53bbe233c1b 100644 --- a/api/management/v1/annotation.pb.go +++ b/api/management/v1/annotation.pb.go @@ -164,7 +164,6 @@ var ( (*AddAnnotationResponse)(nil), // 1: management.v1.AddAnnotationResponse } ) - var file_management_v1_annotation_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/management/v1/azure.pb.go b/api/management/v1/azure.pb.go index 04a05c47ec1..863cff6d5ab 100644 --- a/api/management/v1/azure.pb.go +++ b/api/management/v1/azure.pb.go @@ -726,7 +726,6 @@ var ( (*durationpb.Duration)(nil), // 7: google.protobuf.Duration } ) - var file_management_v1_azure_proto_depIdxs = []int32{ 0, // 0: management.v1.DiscoverAzureDatabaseInstance.type:type_name -> management.v1.DiscoverAzureDatabaseType 2, // 1: management.v1.DiscoverAzureDatabaseResponse.azure_database_instance:type_name -> management.v1.DiscoverAzureDatabaseInstance diff --git a/api/management/v1/external.pb.go b/api/management/v1/external.pb.go index 3632121e1c2..d990cb53abe 100644 --- a/api/management/v1/external.pb.go +++ b/api/management/v1/external.pb.go @@ -355,7 +355,6 @@ var ( (*v1.ExternalExporter)(nil), // 6: inventory.v1.ExternalExporter } ) - var file_management_v1_external_proto_depIdxs = []int32{ 3, // 0: management.v1.AddExternalServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddExternalServiceParams.custom_labels:type_name -> management.v1.AddExternalServiceParams.CustomLabelsEntry diff --git a/api/management/v1/haproxy.pb.go b/api/management/v1/haproxy.pb.go index f3de5158762..95cad534323 100644 --- a/api/management/v1/haproxy.pb.go +++ b/api/management/v1/haproxy.pb.go @@ -333,7 +333,6 @@ var ( (*v1.ExternalExporter)(nil), // 6: inventory.v1.ExternalExporter } ) - var file_management_v1_haproxy_proto_depIdxs = []int32{ 3, // 0: management.v1.AddHAProxyServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddHAProxyServiceParams.custom_labels:type_name -> management.v1.AddHAProxyServiceParams.CustomLabelsEntry diff --git a/api/management/v1/json/client/management_service/add_service_responses.go b/api/management/v1/json/client/management_service/add_service_responses.go index a33b14b1373..075a8c6ec91 100644 --- a/api/management/v1/json/client/management_service/add_service_responses.go +++ b/api/management/v1/json/client/management_service/add_service_responses.go @@ -10515,12 +10515,6 @@ type AddServiceParamsBodyMysql struct { // If true, adds qan-mysql-slowlog-agent for provided service. QANMysqlSlowlog bool `json:"qan_mysql_slowlog,omitempty"` - // Watch this service's database log files and ship them to PMM Server. - WatchLogs bool `json:"watch_logs,omitempty"` - - // Absolute paths of the database log files to watch. - LogFiles []string `json:"log_files,omitempty"` - // Custom user-assigned labels for Service. CustomLabels map[string]string `json:"custom_labels,omitempty"` @@ -10589,6 +10583,12 @@ type AddServiceParamsBodyMysql struct { // Connection timeout for exporter (if set). ConnectionTimeout string `json:"connection_timeout,omitempty"` + // Watch this service's database log files and ship them to PMM Server. + WatchLogs bool `json:"watch_logs,omitempty"` + + // Absolute paths of the database log files to watch (e.g. the MySQL error log). + LogFiles []string `json:"log_files"` + // add node AddNode *AddServiceParamsBodyMysqlAddNode `json:"add_node,omitempty"` } diff --git a/api/management/v1/json/v1.json b/api/management/v1/json/v1.json index 98e5b993d75..8a28970262e 100644 --- a/api/management/v1/json/v1.json +++ b/api/management/v1/json/v1.json @@ -2291,6 +2291,19 @@ "description": "Connection timeout for exporter (if set).", "type": "string", "x-order": 33 + }, + "watch_logs": { + "description": "Watch this service's database log files and ship them to PMM Server.", + "type": "boolean", + "x-order": 34 + }, + "log_files": { + "description": "Absolute paths of the database log files to watch (e.g. the MySQL error log).", + "type": "array", + "items": { + "type": "string" + }, + "x-order": 35 } }, "x-order": 0 diff --git a/api/management/v1/metrics.pb.go b/api/management/v1/metrics.pb.go index 748642db7cb..b552c7955fb 100644 --- a/api/management/v1/metrics.pb.go +++ b/api/management/v1/metrics.pb.go @@ -103,7 +103,6 @@ var ( MetricsMode(0), // 0: management.v1.MetricsMode } ) - var file_management_v1_metrics_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/management/v1/mongodb.pb.go b/api/management/v1/mongodb.pb.go index c25cc4f8282..aad151306df 100644 --- a/api/management/v1/mongodb.pb.go +++ b/api/management/v1/mongodb.pb.go @@ -559,7 +559,6 @@ var ( (*v1.RTAMongoDBAgent)(nil), // 11: inventory.v1.RTAMongoDBAgent } ) - var file_management_v1_mongodb_proto_depIdxs = []int32{ 3, // 0: management.v1.AddMongoDBServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddMongoDBServiceParams.custom_labels:type_name -> management.v1.AddMongoDBServiceParams.CustomLabelsEntry diff --git a/api/management/v1/mysql.pb.go b/api/management/v1/mysql.pb.go index ac2ed56e903..9cbe4962792 100644 --- a/api/management/v1/mysql.pb.go +++ b/api/management/v1/mysql.pb.go @@ -7,15 +7,17 @@ package managementv1 import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + _ "github.com/envoyproxy/protoc-gen-validate/validate" - _ "github.com/percona/pmm/api/extensions/v1" - v1 "github.com/percona/pmm/api/inventory/v1" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" - reflect "reflect" - sync "sync" - unsafe "unsafe" + + _ "github.com/percona/pmm/api/extensions/v1" + v1 "github.com/percona/pmm/api/inventory/v1" ) const ( @@ -547,21 +549,23 @@ func file_management_v1_mysql_proto_rawDescGZIP() []byte { return file_management_v1_mysql_proto_rawDescData } -var file_management_v1_mysql_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_management_v1_mysql_proto_goTypes = []any{ - (*AddMySQLServiceParams)(nil), // 0: management.v1.AddMySQLServiceParams - (*MySQLServiceResult)(nil), // 1: management.v1.MySQLServiceResult - nil, // 2: management.v1.AddMySQLServiceParams.CustomLabelsEntry - nil, // 3: management.v1.AddMySQLServiceParams.ExtraDsnParamsEntry - (*AddNodeParams)(nil), // 4: management.v1.AddNodeParams - (MetricsMode)(0), // 5: management.v1.MetricsMode - (v1.LogLevel)(0), // 6: inventory.v1.LogLevel - (*durationpb.Duration)(nil), // 7: google.protobuf.Duration - (*v1.MySQLService)(nil), // 8: inventory.v1.MySQLService - (*v1.MySQLdExporter)(nil), // 9: inventory.v1.MySQLdExporter - (*v1.QANMySQLPerfSchemaAgent)(nil), // 10: inventory.v1.QANMySQLPerfSchemaAgent - (*v1.QANMySQLSlowlogAgent)(nil), // 11: inventory.v1.QANMySQLSlowlogAgent -} +var ( + file_management_v1_mysql_proto_msgTypes = make([]protoimpl.MessageInfo, 4) + file_management_v1_mysql_proto_goTypes = []any{ + (*AddMySQLServiceParams)(nil), // 0: management.v1.AddMySQLServiceParams + (*MySQLServiceResult)(nil), // 1: management.v1.MySQLServiceResult + nil, // 2: management.v1.AddMySQLServiceParams.CustomLabelsEntry + nil, // 3: management.v1.AddMySQLServiceParams.ExtraDsnParamsEntry + (*AddNodeParams)(nil), // 4: management.v1.AddNodeParams + MetricsMode(0), // 5: management.v1.MetricsMode + v1.LogLevel(0), // 6: inventory.v1.LogLevel + (*durationpb.Duration)(nil), // 7: google.protobuf.Duration + (*v1.MySQLService)(nil), // 8: inventory.v1.MySQLService + (*v1.MySQLdExporter)(nil), // 9: inventory.v1.MySQLdExporter + (*v1.QANMySQLPerfSchemaAgent)(nil), // 10: inventory.v1.QANMySQLPerfSchemaAgent + (*v1.QANMySQLSlowlogAgent)(nil), // 11: inventory.v1.QANMySQLSlowlogAgent + } +) var file_management_v1_mysql_proto_depIdxs = []int32{ 4, // 0: management.v1.AddMySQLServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddMySQLServiceParams.custom_labels:type_name -> management.v1.AddMySQLServiceParams.CustomLabelsEntry diff --git a/api/management/v1/mysql.pb.validate.go b/api/management/v1/mysql.pb.validate.go index 1a6f2059526..0e457b20b14 100644 --- a/api/management/v1/mysql.pb.validate.go +++ b/api/management/v1/mysql.pb.validate.go @@ -278,7 +278,8 @@ func (e AddMySQLServiceParamsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AddMySQLServiceParamsValidationError{} @@ -498,7 +499,8 @@ func (e MySQLServiceResultValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = MySQLServiceResultValidationError{} diff --git a/api/management/v1/node.pb.go b/api/management/v1/node.pb.go index 149fb30ad94..53bb2be68db 100644 --- a/api/management/v1/node.pb.go +++ b/api/management/v1/node.pb.go @@ -1255,7 +1255,6 @@ var ( (*timestamppb.Timestamp)(nil), // 21: google.protobuf.Timestamp } ) - var file_management_v1_node_proto_depIdxs = []int32{ 16, // 0: management.v1.AddNodeParams.node_type:type_name -> inventory.v1.NodeType 11, // 1: management.v1.AddNodeParams.custom_labels:type_name -> management.v1.AddNodeParams.CustomLabelsEntry diff --git a/api/management/v1/postgresql.pb.go b/api/management/v1/postgresql.pb.go index 0271ba48788..0e6f54ad033 100644 --- a/api/management/v1/postgresql.pb.go +++ b/api/management/v1/postgresql.pb.go @@ -535,7 +535,6 @@ var ( (*v1.QANPostgreSQLPgStatMonitorAgent)(nil), // 10: inventory.v1.QANPostgreSQLPgStatMonitorAgent } ) - var file_management_v1_postgresql_proto_depIdxs = []int32{ 3, // 0: management.v1.AddPostgreSQLServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddPostgreSQLServiceParams.custom_labels:type_name -> management.v1.AddPostgreSQLServiceParams.CustomLabelsEntry diff --git a/api/management/v1/proxysql.pb.go b/api/management/v1/proxysql.pb.go index e3142ed85df..7d9dbbcfc07 100644 --- a/api/management/v1/proxysql.pb.go +++ b/api/management/v1/proxysql.pb.go @@ -395,7 +395,6 @@ var ( (*v1.ProxySQLExporter)(nil), // 8: inventory.v1.ProxySQLExporter } ) - var file_management_v1_proxysql_proto_depIdxs = []int32{ 3, // 0: management.v1.AddProxySQLServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddProxySQLServiceParams.custom_labels:type_name -> management.v1.AddProxySQLServiceParams.CustomLabelsEntry diff --git a/api/management/v1/rds.pb.go b/api/management/v1/rds.pb.go index d338efd3738..fb882ea8de5 100644 --- a/api/management/v1/rds.pb.go +++ b/api/management/v1/rds.pb.go @@ -854,7 +854,6 @@ var ( (*v1.QANPostgreSQLPgStatementsAgent)(nil), // 16: inventory.v1.QANPostgreSQLPgStatementsAgent } ) - var file_management_v1_rds_proto_depIdxs = []int32{ 0, // 0: management.v1.DiscoverRDSInstance.engine:type_name -> management.v1.DiscoverRDSEngine 1, // 1: management.v1.DiscoverRDSResponse.rds_instances:type_name -> management.v1.DiscoverRDSInstance diff --git a/api/management/v1/service.pb.go b/api/management/v1/service.pb.go index cbad04b7f53..6ea52fbc973 100644 --- a/api/management/v1/service.pb.go +++ b/api/management/v1/service.pb.go @@ -1005,7 +1005,6 @@ var ( (*AddAzureDatabaseResponse)(nil), // 47: management.v1.AddAzureDatabaseResponse } ) - var file_management_v1_service_proto_depIdxs = []int32{ 9, // 0: management.v1.AddServiceRequest.mysql:type_name -> management.v1.AddMySQLServiceParams 10, // 1: management.v1.AddServiceRequest.mongodb:type_name -> management.v1.AddMongoDBServiceParams diff --git a/api/management/v1/severity.pb.go b/api/management/v1/severity.pb.go index 6a14d366aa6..51c04a93a0e 100644 --- a/api/management/v1/severity.pb.go +++ b/api/management/v1/severity.pb.go @@ -125,7 +125,6 @@ var ( Severity(0), // 0: management.v1.Severity } ) - var file_management_v1_severity_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/management/v1/valkey.pb.go b/api/management/v1/valkey.pb.go index a0fc2f73fe2..26cc4db7f99 100644 --- a/api/management/v1/valkey.pb.go +++ b/api/management/v1/valkey.pb.go @@ -417,7 +417,6 @@ var ( (*v1.ValkeyExporter)(nil), // 8: inventory.v1.ValkeyExporter } ) - var file_management_v1_valkey_proto_depIdxs = []int32{ 3, // 0: management.v1.AddValkeyServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddValkeyServiceParams.custom_labels:type_name -> management.v1.AddValkeyServiceParams.CustomLabelsEntry diff --git a/api/qan/v1/collector.pb.go b/api/qan/v1/collector.pb.go index b680bbd8f77..3716a3a24d1 100644 --- a/api/qan/v1/collector.pb.go +++ b/api/qan/v1/collector.pb.go @@ -2757,7 +2757,6 @@ var ( ExampleType(0), // 7: qan.v1.ExampleType } ) - var file_qan_v1_collector_proto_depIdxs = []int32{ 1, // 0: qan.v1.CollectRequest.metrics_bucket:type_name -> qan.v1.MetricsBucket 6, // 1: qan.v1.MetricsBucket.agent_type:type_name -> inventory.v1.AgentType diff --git a/api/qan/v1/filters.pb.go b/api/qan/v1/filters.pb.go index fcbf5e7aead..390a687dbc4 100644 --- a/api/qan/v1/filters.pb.go +++ b/api/qan/v1/filters.pb.go @@ -293,7 +293,6 @@ var ( (*MapFieldEntry)(nil), // 6: qan.v1.MapFieldEntry } ) - var file_qan_v1_filters_proto_depIdxs = []int32{ 5, // 0: qan.v1.GetFilteredMetricsNamesRequest.period_start_from:type_name -> google.protobuf.Timestamp 5, // 1: qan.v1.GetFilteredMetricsNamesRequest.period_start_to:type_name -> google.protobuf.Timestamp diff --git a/api/qan/v1/object_details.pb.go b/api/qan/v1/object_details.pb.go index f004bc0ec60..53e6c06150b 100644 --- a/api/qan/v1/object_details.pb.go +++ b/api/qan/v1/object_details.pb.go @@ -1645,7 +1645,6 @@ var ( ExampleType(0), // 29: qan.v1.ExampleType } ) - var file_qan_v1_object_details_proto_depIdxs = []int32{ 26, // 0: qan.v1.GetMetricsRequest.period_start_from:type_name -> google.protobuf.Timestamp 26, // 1: qan.v1.GetMetricsRequest.period_start_to:type_name -> google.protobuf.Timestamp diff --git a/api/qan/v1/profile.pb.go b/api/qan/v1/profile.pb.go index 03ab97e871a..7700b76dcd3 100644 --- a/api/qan/v1/profile.pb.go +++ b/api/qan/v1/profile.pb.go @@ -598,7 +598,6 @@ var ( (*Point)(nil), // 8: qan.v1.Point } ) - var file_qan_v1_profile_proto_depIdxs = []int32{ 7, // 0: qan.v1.GetReportRequest.period_start_from:type_name -> google.protobuf.Timestamp 7, // 1: qan.v1.GetReportRequest.period_start_to:type_name -> google.protobuf.Timestamp diff --git a/api/qan/v1/qan.pb.go b/api/qan/v1/qan.pb.go index c1d3bc6bb2e..2d37431a7c0 100644 --- a/api/qan/v1/qan.pb.go +++ b/api/qan/v1/qan.pb.go @@ -1000,7 +1000,6 @@ var ( (*MapFieldEntry)(nil), // 2: qan.v1.MapFieldEntry } ) - var file_qan_v1_qan_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/qan/v1/service.pb.go b/api/qan/v1/service.pb.go index 0e52423aa51..c5c688d9000 100644 --- a/api/qan/v1/service.pb.go +++ b/api/qan/v1/service.pb.go @@ -258,7 +258,6 @@ var ( (*GetQueryExampleResponse)(nil), // 24: qan.v1.GetQueryExampleResponse } ) - var file_qan_v1_service_proto_depIdxs = []int32{ 4, // 0: qan.v1.GetMetricsNamesResponse.data:type_name -> qan.v1.GetMetricsNamesResponse.DataEntry 5, // 1: qan.v1.QANService.GetReport:input_type -> qan.v1.GetReportRequest diff --git a/api/realtimeanalytics/v1/collector.pb.go b/api/realtimeanalytics/v1/collector.pb.go index f149de0a6cf..b9b81466e7c 100644 --- a/api/realtimeanalytics/v1/collector.pb.go +++ b/api/realtimeanalytics/v1/collector.pb.go @@ -140,7 +140,6 @@ var ( (*QueryData)(nil), // 2: realtimeanalytics.v1.QueryData } ) - var file_realtimeanalytics_v1_collector_proto_depIdxs = []int32{ 2, // 0: realtimeanalytics.v1.CollectRequest.queries:type_name -> realtimeanalytics.v1.QueryData 0, // 1: realtimeanalytics.v1.CollectorService.Collect:input_type -> realtimeanalytics.v1.CollectRequest diff --git a/api/realtimeanalytics/v1/query.pb.go b/api/realtimeanalytics/v1/query.pb.go index 43c4a1bdd5c..b9ab1809d9a 100644 --- a/api/realtimeanalytics/v1/query.pb.go +++ b/api/realtimeanalytics/v1/query.pb.go @@ -331,7 +331,6 @@ var ( (*durationpb.Duration)(nil), // 3: google.protobuf.Duration } ) - var file_realtimeanalytics_v1_query_proto_depIdxs = []int32{ 2, // 0: realtimeanalytics.v1.QueryMongoDBData.operation_start_time:type_name -> google.protobuf.Timestamp 3, // 1: realtimeanalytics.v1.QueryData.query_execution_duration:type_name -> google.protobuf.Duration diff --git a/api/realtimeanalytics/v1/realtimeanalytics.pb.go b/api/realtimeanalytics/v1/realtimeanalytics.pb.go index 8dbdbf8ccff..bd339f4bad9 100644 --- a/api/realtimeanalytics/v1/realtimeanalytics.pb.go +++ b/api/realtimeanalytics/v1/realtimeanalytics.pb.go @@ -718,7 +718,6 @@ var ( (*QueryData)(nil), // 16: realtimeanalytics.v1.QueryData } ) - var file_realtimeanalytics_v1_realtimeanalytics_proto_depIdxs = []int32{ 12, // 0: realtimeanalytics.v1.ListServicesRequest.service_type:type_name -> inventory.v1.ServiceType 13, // 1: realtimeanalytics.v1.ListServicesResponse.mongodb:type_name -> inventory.v1.MongoDBService diff --git a/api/server/v1/httperror.pb.go b/api/server/v1/httperror.pb.go index 8778ad26272..ef269ba2292 100644 --- a/api/server/v1/httperror.pb.go +++ b/api/server/v1/httperror.pb.go @@ -127,7 +127,6 @@ var ( (*anypb.Any)(nil), // 1: google.protobuf.Any } ) - var file_server_v1_httperror_proto_depIdxs = []int32{ 1, // 0: server.v1.HttpError.details:type_name -> google.protobuf.Any 1, // [1:1] is the sub-list for method output_type diff --git a/api/server/v1/json/client/server_service/change_settings_responses.go b/api/server/v1/json/client/server_service/change_settings_responses.go index 1d956a34756..891ab2c1b91 100644 --- a/api/server/v1/json/client/server_service/change_settings_responses.go +++ b/api/server/v1/json/client/server_service/change_settings_responses.go @@ -225,6 +225,9 @@ type ChangeSettingsBody struct { // A number of full days for which an update is snoozed, i.e. a multiple of 24h: 2592000s, 43200m, 720h. UpdateSnoozeDuration string `json:"update_snooze_duration,omitempty"` + // A number of full days for log and trace data retention in ClickHouse. Should have a suffix in JSON: 2592000s, 43200m, 720h. + LogsRetention string `json:"logs_retention,omitempty"` + // advisor run intervals AdvisorRunIntervals *ChangeSettingsParamsBodyAdvisorRunIntervals `json:"advisor_run_intervals,omitempty"` @@ -989,6 +992,9 @@ type ChangeSettingsOKBodySettings struct { // Duration for which an update is snoozed UpdateSnoozeDuration string `json:"update_snooze_duration,omitempty"` + // A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces). + LogsRetention string `json:"logs_retention,omitempty"` + // advisor run intervals AdvisorRunIntervals *ChangeSettingsOKBodySettingsAdvisorRunIntervals `json:"advisor_run_intervals,omitempty"` diff --git a/api/server/v1/json/client/server_service/get_settings_responses.go b/api/server/v1/json/client/server_service/get_settings_responses.go index 58945eeca44..f09340c9928 100644 --- a/api/server/v1/json/client/server_service/get_settings_responses.go +++ b/api/server/v1/json/client/server_service/get_settings_responses.go @@ -735,6 +735,9 @@ type GetSettingsOKBodySettings struct { // Duration for which an update is snoozed UpdateSnoozeDuration string `json:"update_snooze_duration,omitempty"` + // A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces). + LogsRetention string `json:"logs_retention,omitempty"` + // advisor run intervals AdvisorRunIntervals *GetSettingsOKBodySettingsAdvisorRunIntervals `json:"advisor_run_intervals,omitempty"` diff --git a/api/server/v1/json/v1.json b/api/server/v1/json/v1.json index bf2ad5c8718..e8047bacac6 100644 --- a/api/server/v1/json/v1.json +++ b/api/server/v1/json/v1.json @@ -316,6 +316,11 @@ "type": "string", "title": "Duration for which an update is snoozed", "x-order": 18 + }, + "logs_retention": { + "description": "A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces).", + "type": "string", + "x-order": 19 } }, "x-order": 0 @@ -498,6 +503,11 @@ "description": "A number of full days for which an update is snoozed, i.e. a multiple of 24h: 2592000s, 43200m, 720h.", "type": "string", "x-order": 14 + }, + "logs_retention": { + "description": "A number of full days for log and trace data retention in ClickHouse. Should have a suffix in JSON: 2592000s, 43200m, 720h.", + "type": "string", + "x-order": 15 } } } @@ -644,6 +654,11 @@ "type": "string", "title": "Duration for which an update is snoozed", "x-order": 18 + }, + "logs_retention": { + "description": "A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces).", + "type": "string", + "x-order": 19 } }, "x-order": 0 diff --git a/api/server/v1/server.pb.go b/api/server/v1/server.pb.go index 871f2d3c9ae..dc7a4ad833e 100644 --- a/api/server/v1/server.pb.go +++ b/api/server/v1/server.pb.go @@ -7,17 +7,19 @@ package serverv1 import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options" - common "github.com/percona/pmm/api/common" - _ "github.com/percona/pmm/api/extensions/v1" _ "google.golang.org/genproto/googleapis/api/annotations" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" - reflect "reflect" - sync "sync" - unsafe "unsafe" + + common "github.com/percona/pmm/api/common" + _ "github.com/percona/pmm/api/extensions/v1" ) const ( @@ -1934,40 +1936,42 @@ func file_server_v1_server_proto_rawDescGZIP() []byte { return file_server_v1_server_proto_rawDescData } -var file_server_v1_server_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_server_v1_server_proto_msgTypes = make([]protoimpl.MessageInfo, 26) -var file_server_v1_server_proto_goTypes = []any{ - (DistributionMethod)(0), // 0: server.v1.DistributionMethod - (*VersionInfo)(nil), // 1: server.v1.VersionInfo - (*VersionRequest)(nil), // 2: server.v1.VersionRequest - (*VersionResponse)(nil), // 3: server.v1.VersionResponse - (*ReadinessRequest)(nil), // 4: server.v1.ReadinessRequest - (*ReadinessResponse)(nil), // 5: server.v1.ReadinessResponse - (*LeaderHealthCheckRequest)(nil), // 6: server.v1.LeaderHealthCheckRequest - (*LeaderHealthCheckResponse)(nil), // 7: server.v1.LeaderHealthCheckResponse - (*CheckUpdatesRequest)(nil), // 8: server.v1.CheckUpdatesRequest - (*DockerVersionInfo)(nil), // 9: server.v1.DockerVersionInfo - (*CheckUpdatesResponse)(nil), // 10: server.v1.CheckUpdatesResponse - (*ListChangeLogsRequest)(nil), // 11: server.v1.ListChangeLogsRequest - (*ListChangeLogsResponse)(nil), // 12: server.v1.ListChangeLogsResponse - (*StartUpdateRequest)(nil), // 13: server.v1.StartUpdateRequest - (*StartUpdateResponse)(nil), // 14: server.v1.StartUpdateResponse - (*UpdateStatusRequest)(nil), // 15: server.v1.UpdateStatusRequest - (*UpdateStatusResponse)(nil), // 16: server.v1.UpdateStatusResponse - (*MetricsResolutions)(nil), // 17: server.v1.MetricsResolutions - (*AdvisorRunIntervals)(nil), // 18: server.v1.AdvisorRunIntervals - (*Settings)(nil), // 19: server.v1.Settings - (*ReadOnlySettings)(nil), // 20: server.v1.ReadOnlySettings - (*GetSettingsRequest)(nil), // 21: server.v1.GetSettingsRequest - (*GetReadOnlySettingsRequest)(nil), // 22: server.v1.GetReadOnlySettingsRequest - (*GetSettingsResponse)(nil), // 23: server.v1.GetSettingsResponse - (*GetReadOnlySettingsResponse)(nil), // 24: server.v1.GetReadOnlySettingsResponse - (*ChangeSettingsRequest)(nil), // 25: server.v1.ChangeSettingsRequest - (*ChangeSettingsResponse)(nil), // 26: server.v1.ChangeSettingsResponse - (*timestamppb.Timestamp)(nil), // 27: google.protobuf.Timestamp - (*durationpb.Duration)(nil), // 28: google.protobuf.Duration - (*common.StringArray)(nil), // 29: common.StringArray -} +var ( + file_server_v1_server_proto_enumTypes = make([]protoimpl.EnumInfo, 1) + file_server_v1_server_proto_msgTypes = make([]protoimpl.MessageInfo, 26) + file_server_v1_server_proto_goTypes = []any{ + DistributionMethod(0), // 0: server.v1.DistributionMethod + (*VersionInfo)(nil), // 1: server.v1.VersionInfo + (*VersionRequest)(nil), // 2: server.v1.VersionRequest + (*VersionResponse)(nil), // 3: server.v1.VersionResponse + (*ReadinessRequest)(nil), // 4: server.v1.ReadinessRequest + (*ReadinessResponse)(nil), // 5: server.v1.ReadinessResponse + (*LeaderHealthCheckRequest)(nil), // 6: server.v1.LeaderHealthCheckRequest + (*LeaderHealthCheckResponse)(nil), // 7: server.v1.LeaderHealthCheckResponse + (*CheckUpdatesRequest)(nil), // 8: server.v1.CheckUpdatesRequest + (*DockerVersionInfo)(nil), // 9: server.v1.DockerVersionInfo + (*CheckUpdatesResponse)(nil), // 10: server.v1.CheckUpdatesResponse + (*ListChangeLogsRequest)(nil), // 11: server.v1.ListChangeLogsRequest + (*ListChangeLogsResponse)(nil), // 12: server.v1.ListChangeLogsResponse + (*StartUpdateRequest)(nil), // 13: server.v1.StartUpdateRequest + (*StartUpdateResponse)(nil), // 14: server.v1.StartUpdateResponse + (*UpdateStatusRequest)(nil), // 15: server.v1.UpdateStatusRequest + (*UpdateStatusResponse)(nil), // 16: server.v1.UpdateStatusResponse + (*MetricsResolutions)(nil), // 17: server.v1.MetricsResolutions + (*AdvisorRunIntervals)(nil), // 18: server.v1.AdvisorRunIntervals + (*Settings)(nil), // 19: server.v1.Settings + (*ReadOnlySettings)(nil), // 20: server.v1.ReadOnlySettings + (*GetSettingsRequest)(nil), // 21: server.v1.GetSettingsRequest + (*GetReadOnlySettingsRequest)(nil), // 22: server.v1.GetReadOnlySettingsRequest + (*GetSettingsResponse)(nil), // 23: server.v1.GetSettingsResponse + (*GetReadOnlySettingsResponse)(nil), // 24: server.v1.GetReadOnlySettingsResponse + (*ChangeSettingsRequest)(nil), // 25: server.v1.ChangeSettingsRequest + (*ChangeSettingsResponse)(nil), // 26: server.v1.ChangeSettingsResponse + (*timestamppb.Timestamp)(nil), // 27: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 28: google.protobuf.Duration + (*common.StringArray)(nil), // 29: common.StringArray + } +) var file_server_v1_server_proto_depIdxs = []int32{ 27, // 0: server.v1.VersionInfo.timestamp:type_name -> google.protobuf.Timestamp 1, // 1: server.v1.VersionResponse.server:type_name -> server.v1.VersionInfo diff --git a/api/server/v1/server.pb.validate.go b/api/server/v1/server.pb.validate.go index 77f567a4d28..314c1928272 100644 --- a/api/server/v1/server.pb.validate.go +++ b/api/server/v1/server.pb.validate.go @@ -154,7 +154,8 @@ func (e VersionInfoValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = VersionInfoValidationError{} @@ -256,7 +257,8 @@ func (e VersionRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = VersionRequestValidationError{} @@ -418,7 +420,8 @@ func (e VersionResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = VersionResponseValidationError{} @@ -518,7 +521,8 @@ func (e ReadinessRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ReadinessRequestValidationError{} @@ -620,7 +624,8 @@ func (e ReadinessResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ReadinessResponseValidationError{} @@ -722,7 +727,8 @@ func (e LeaderHealthCheckRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = LeaderHealthCheckRequestValidationError{} @@ -824,7 +830,8 @@ func (e LeaderHealthCheckResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = LeaderHealthCheckResponseValidationError{} @@ -930,7 +937,8 @@ func (e CheckUpdatesRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = CheckUpdatesRequestValidationError{} @@ -1069,7 +1077,8 @@ func (e DockerVersionInfoValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = DockerVersionInfoValidationError{} @@ -1262,7 +1271,8 @@ func (e CheckUpdatesResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = CheckUpdatesResponseValidationError{} @@ -1364,7 +1374,8 @@ func (e ListChangeLogsRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ListChangeLogsRequestValidationError{} @@ -1529,7 +1540,8 @@ func (e ListChangeLogsResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ListChangeLogsResponseValidationError{} @@ -1633,7 +1645,8 @@ func (e StartUpdateRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartUpdateRequestValidationError{} @@ -1739,7 +1752,8 @@ func (e StartUpdateResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = StartUpdateResponseValidationError{} @@ -1845,7 +1859,8 @@ func (e UpdateStatusRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = UpdateStatusRequestValidationError{} @@ -1951,7 +1966,8 @@ func (e UpdateStatusResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = UpdateStatusResponseValidationError{} @@ -2140,7 +2156,8 @@ func (e MetricsResolutionsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = MetricsResolutionsValidationError{} @@ -2329,7 +2346,8 @@ func (e AdvisorRunIntervalsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = AdvisorRunIntervalsValidationError{} @@ -2599,7 +2617,8 @@ func (e SettingsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = SettingsValidationError{} @@ -2715,7 +2734,8 @@ func (e ReadOnlySettingsValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ReadOnlySettingsValidationError{} @@ -2817,7 +2837,8 @@ func (e GetSettingsRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetSettingsRequestValidationError{} @@ -2919,7 +2940,8 @@ func (e GetReadOnlySettingsRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetReadOnlySettingsRequestValidationError{} @@ -3050,7 +3072,8 @@ func (e GetSettingsResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetSettingsResponseValidationError{} @@ -3182,7 +3205,8 @@ func (e GetReadOnlySettingsResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = GetReadOnlySettingsResponseValidationError{} @@ -3375,7 +3399,6 @@ func (m *ChangeSettingsRequest) validate(all bool) error { } if m.AwsPartitions != nil { - if all { switch v := interface{}(m.GetAwsPartitions()).(type) { case interface{ ValidateAll() error }: @@ -3404,7 +3427,6 @@ func (m *ChangeSettingsRequest) validate(all bool) error { } } } - } if m.EnableAdvisor != nil { @@ -3502,7 +3524,8 @@ func (e ChangeSettingsRequestValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeSettingsRequestValidationError{} @@ -3633,7 +3656,8 @@ func (e ChangeSettingsResponseValidationError) Error() string { key, e.field, e.reason, - cause) + cause, + ) } var _ error = ChangeSettingsResponseValidationError{} diff --git a/api/swagger/swagger-dev.json b/api/swagger/swagger-dev.json index f521777f744..4ab87f0e675 100644 --- a/api/swagger/swagger-dev.json +++ b/api/swagger/swagger-dev.json @@ -5351,7 +5351,8 @@ "AGENT_TYPE_RDS_EXPORTER", "AGENT_TYPE_AZURE_DATABASE_EXPORTER", "AGENT_TYPE_NOMAD_AGENT", - "AGENT_TYPE_RTA_MONGODB_AGENT" + "AGENT_TYPE_RTA_MONGODB_AGENT", + "AGENT_TYPE_DB_LOG_WATCHER_AGENT" ], "type": "string", "default": "AGENT_TYPE_UNSPECIFIED", @@ -7490,6 +7491,105 @@ } }, "x-order": 18 + }, + "db_log_watcher_agent": { + "type": "array", + "items": { + "description": "DBLogWatcherAgent runs within pmm-agent and ships watched database log files to the PMM Server.", + "type": "object", + "properties": { + "agent_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "pmm_agent_id": { + "description": "The pmm-agent identifier which runs this instance.", + "type": "string", + "x-order": 1 + }, + "disabled": { + "description": "Desired Agent status: enabled (false) or disabled (true).", + "type": "boolean", + "x-order": 2 + }, + "service_id": { + "description": "Service identifier.", + "type": "string", + "x-order": 3 + }, + "db_system": { + "description": "Database engine: mysql, postgresql, mongodb, valkey or redis.", + "type": "string", + "x-order": 4 + }, + "watched_logs": { + "description": "Log files being watched and shipped.", + "type": "array", + "items": { + "description": "WatchedLog identifies a single database log file to watch and its type.", + "type": "object", + "properties": { + "path": { + "description": "Absolute path of the log file on the client node.", + "type": "string", + "x-order": 0 + }, + "type": { + "description": "Log type: error, slow or general.", + "type": "string", + "x-order": 1 + } + } + }, + "x-order": 5 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 6 + }, + "status": { + "description": "AgentStatus represents actual Agent status.\n\n - AGENT_STATUS_STARTING: Agent is starting.\n - AGENT_STATUS_INITIALIZATION_ERROR: Agent encountered error when starting.\n - AGENT_STATUS_RUNNING: Agent is running.\n - AGENT_STATUS_WAITING: Agent encountered error and will be restarted automatically soon.\n - AGENT_STATUS_STOPPING: Agent is stopping.\n - AGENT_STATUS_DONE: Agent has been stopped or disabled.\n - AGENT_STATUS_UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "type": "string", + "default": "AGENT_STATUS_UNSPECIFIED", + "enum": [ + "AGENT_STATUS_UNSPECIFIED", + "AGENT_STATUS_STARTING", + "AGENT_STATUS_INITIALIZATION_ERROR", + "AGENT_STATUS_RUNNING", + "AGENT_STATUS_WAITING", + "AGENT_STATUS_STOPPING", + "AGENT_STATUS_DONE", + "AGENT_STATUS_UNKNOWN" + ], + "x-order": 7 + }, + "process_exec_path": { + "type": "string", + "x-order": 8 + }, + "log_level": { + "description": "- LOG_LEVEL_UNSPECIFIED: Auto", + "type": "string", + "title": "Log level for exporters", + "default": "LOG_LEVEL_UNSPECIFIED", + "enum": [ + "LOG_LEVEL_UNSPECIFIED", + "LOG_LEVEL_FATAL", + "LOG_LEVEL_ERROR", + "LOG_LEVEL_WARN", + "LOG_LEVEL_INFO", + "LOG_LEVEL_DEBUG" + ], + "x-order": 9 + } + } + }, + "x-order": 19 } } } @@ -13200,6 +13300,102 @@ } }, "x-order": 18 + }, + "db_log_watcher_agent": { + "description": "DBLogWatcherAgent runs within pmm-agent and ships watched database log files to the PMM Server.", + "type": "object", + "properties": { + "agent_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "pmm_agent_id": { + "description": "The pmm-agent identifier which runs this instance.", + "type": "string", + "x-order": 1 + }, + "disabled": { + "description": "Desired Agent status: enabled (false) or disabled (true).", + "type": "boolean", + "x-order": 2 + }, + "service_id": { + "description": "Service identifier.", + "type": "string", + "x-order": 3 + }, + "db_system": { + "description": "Database engine: mysql, postgresql, mongodb, valkey or redis.", + "type": "string", + "x-order": 4 + }, + "watched_logs": { + "description": "Log files being watched and shipped.", + "type": "array", + "items": { + "description": "WatchedLog identifies a single database log file to watch and its type.", + "type": "object", + "properties": { + "path": { + "description": "Absolute path of the log file on the client node.", + "type": "string", + "x-order": 0 + }, + "type": { + "description": "Log type: error, slow or general.", + "type": "string", + "x-order": 1 + } + } + }, + "x-order": 5 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 6 + }, + "status": { + "description": "AgentStatus represents actual Agent status.\n\n - AGENT_STATUS_STARTING: Agent is starting.\n - AGENT_STATUS_INITIALIZATION_ERROR: Agent encountered error when starting.\n - AGENT_STATUS_RUNNING: Agent is running.\n - AGENT_STATUS_WAITING: Agent encountered error and will be restarted automatically soon.\n - AGENT_STATUS_STOPPING: Agent is stopping.\n - AGENT_STATUS_DONE: Agent has been stopped or disabled.\n - AGENT_STATUS_UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "type": "string", + "default": "AGENT_STATUS_UNSPECIFIED", + "enum": [ + "AGENT_STATUS_UNSPECIFIED", + "AGENT_STATUS_STARTING", + "AGENT_STATUS_INITIALIZATION_ERROR", + "AGENT_STATUS_RUNNING", + "AGENT_STATUS_WAITING", + "AGENT_STATUS_STOPPING", + "AGENT_STATUS_DONE", + "AGENT_STATUS_UNKNOWN" + ], + "x-order": 7 + }, + "process_exec_path": { + "type": "string", + "x-order": 8 + }, + "log_level": { + "description": "- LOG_LEVEL_UNSPECIFIED: Auto", + "type": "string", + "title": "Log level for exporters", + "default": "LOG_LEVEL_UNSPECIFIED", + "enum": [ + "LOG_LEVEL_UNSPECIFIED", + "LOG_LEVEL_FATAL", + "LOG_LEVEL_ERROR", + "LOG_LEVEL_WARN", + "LOG_LEVEL_INFO", + "LOG_LEVEL_DEBUG" + ], + "x-order": 9 + } + }, + "x-order": 19 } } } @@ -23677,6 +23873,19 @@ "description": "Connection timeout for exporter (if set).", "type": "string", "x-order": 33 + }, + "watch_logs": { + "description": "Watch this service's database log files and ship them to PMM Server.", + "type": "boolean", + "x-order": 34 + }, + "log_files": { + "description": "Absolute paths of the database log files to watch (e.g. the MySQL error log).", + "type": "array", + "items": { + "type": "string" + }, + "x-order": 35 } }, "x-order": 0 @@ -32259,6 +32468,11 @@ "type": "string", "title": "Duration for which an update is snoozed", "x-order": 18 + }, + "logs_retention": { + "description": "A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces).", + "type": "string", + "x-order": 19 } }, "x-order": 0 @@ -32441,6 +32655,11 @@ "description": "A number of full days for which an update is snoozed, i.e. a multiple of 24h: 2592000s, 43200m, 720h.", "type": "string", "x-order": 14 + }, + "logs_retention": { + "description": "A number of full days for log and trace data retention in ClickHouse. Should have a suffix in JSON: 2592000s, 43200m, 720h.", + "type": "string", + "x-order": 15 } } } @@ -32587,6 +32806,11 @@ "type": "string", "title": "Duration for which an update is snoozed", "x-order": 18 + }, + "logs_retention": { + "description": "A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces).", + "type": "string", + "x-order": 19 } }, "x-order": 0 diff --git a/api/swagger/swagger.json b/api/swagger/swagger.json index ae34b9296a5..a240741c50a 100644 --- a/api/swagger/swagger.json +++ b/api/swagger/swagger.json @@ -4378,7 +4378,8 @@ "AGENT_TYPE_RDS_EXPORTER", "AGENT_TYPE_AZURE_DATABASE_EXPORTER", "AGENT_TYPE_NOMAD_AGENT", - "AGENT_TYPE_RTA_MONGODB_AGENT" + "AGENT_TYPE_RTA_MONGODB_AGENT", + "AGENT_TYPE_DB_LOG_WATCHER_AGENT" ], "type": "string", "default": "AGENT_TYPE_UNSPECIFIED", @@ -6517,6 +6518,105 @@ } }, "x-order": 18 + }, + "db_log_watcher_agent": { + "type": "array", + "items": { + "description": "DBLogWatcherAgent runs within pmm-agent and ships watched database log files to the PMM Server.", + "type": "object", + "properties": { + "agent_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "pmm_agent_id": { + "description": "The pmm-agent identifier which runs this instance.", + "type": "string", + "x-order": 1 + }, + "disabled": { + "description": "Desired Agent status: enabled (false) or disabled (true).", + "type": "boolean", + "x-order": 2 + }, + "service_id": { + "description": "Service identifier.", + "type": "string", + "x-order": 3 + }, + "db_system": { + "description": "Database engine: mysql, postgresql, mongodb, valkey or redis.", + "type": "string", + "x-order": 4 + }, + "watched_logs": { + "description": "Log files being watched and shipped.", + "type": "array", + "items": { + "description": "WatchedLog identifies a single database log file to watch and its type.", + "type": "object", + "properties": { + "path": { + "description": "Absolute path of the log file on the client node.", + "type": "string", + "x-order": 0 + }, + "type": { + "description": "Log type: error, slow or general.", + "type": "string", + "x-order": 1 + } + } + }, + "x-order": 5 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 6 + }, + "status": { + "description": "AgentStatus represents actual Agent status.\n\n - AGENT_STATUS_STARTING: Agent is starting.\n - AGENT_STATUS_INITIALIZATION_ERROR: Agent encountered error when starting.\n - AGENT_STATUS_RUNNING: Agent is running.\n - AGENT_STATUS_WAITING: Agent encountered error and will be restarted automatically soon.\n - AGENT_STATUS_STOPPING: Agent is stopping.\n - AGENT_STATUS_DONE: Agent has been stopped or disabled.\n - AGENT_STATUS_UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "type": "string", + "default": "AGENT_STATUS_UNSPECIFIED", + "enum": [ + "AGENT_STATUS_UNSPECIFIED", + "AGENT_STATUS_STARTING", + "AGENT_STATUS_INITIALIZATION_ERROR", + "AGENT_STATUS_RUNNING", + "AGENT_STATUS_WAITING", + "AGENT_STATUS_STOPPING", + "AGENT_STATUS_DONE", + "AGENT_STATUS_UNKNOWN" + ], + "x-order": 7 + }, + "process_exec_path": { + "type": "string", + "x-order": 8 + }, + "log_level": { + "description": "- LOG_LEVEL_UNSPECIFIED: Auto", + "type": "string", + "title": "Log level for exporters", + "default": "LOG_LEVEL_UNSPECIFIED", + "enum": [ + "LOG_LEVEL_UNSPECIFIED", + "LOG_LEVEL_FATAL", + "LOG_LEVEL_ERROR", + "LOG_LEVEL_WARN", + "LOG_LEVEL_INFO", + "LOG_LEVEL_DEBUG" + ], + "x-order": 9 + } + } + }, + "x-order": 19 } } } @@ -12227,6 +12327,102 @@ } }, "x-order": 18 + }, + "db_log_watcher_agent": { + "description": "DBLogWatcherAgent runs within pmm-agent and ships watched database log files to the PMM Server.", + "type": "object", + "properties": { + "agent_id": { + "description": "Unique randomly generated instance identifier.", + "type": "string", + "x-order": 0 + }, + "pmm_agent_id": { + "description": "The pmm-agent identifier which runs this instance.", + "type": "string", + "x-order": 1 + }, + "disabled": { + "description": "Desired Agent status: enabled (false) or disabled (true).", + "type": "boolean", + "x-order": 2 + }, + "service_id": { + "description": "Service identifier.", + "type": "string", + "x-order": 3 + }, + "db_system": { + "description": "Database engine: mysql, postgresql, mongodb, valkey or redis.", + "type": "string", + "x-order": 4 + }, + "watched_logs": { + "description": "Log files being watched and shipped.", + "type": "array", + "items": { + "description": "WatchedLog identifies a single database log file to watch and its type.", + "type": "object", + "properties": { + "path": { + "description": "Absolute path of the log file on the client node.", + "type": "string", + "x-order": 0 + }, + "type": { + "description": "Log type: error, slow or general.", + "type": "string", + "x-order": 1 + } + } + }, + "x-order": 5 + }, + "custom_labels": { + "description": "Custom user-assigned labels.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-order": 6 + }, + "status": { + "description": "AgentStatus represents actual Agent status.\n\n - AGENT_STATUS_STARTING: Agent is starting.\n - AGENT_STATUS_INITIALIZATION_ERROR: Agent encountered error when starting.\n - AGENT_STATUS_RUNNING: Agent is running.\n - AGENT_STATUS_WAITING: Agent encountered error and will be restarted automatically soon.\n - AGENT_STATUS_STOPPING: Agent is stopping.\n - AGENT_STATUS_DONE: Agent has been stopped or disabled.\n - AGENT_STATUS_UNKNOWN: Agent is not connected, we don't know anything about it's state.", + "type": "string", + "default": "AGENT_STATUS_UNSPECIFIED", + "enum": [ + "AGENT_STATUS_UNSPECIFIED", + "AGENT_STATUS_STARTING", + "AGENT_STATUS_INITIALIZATION_ERROR", + "AGENT_STATUS_RUNNING", + "AGENT_STATUS_WAITING", + "AGENT_STATUS_STOPPING", + "AGENT_STATUS_DONE", + "AGENT_STATUS_UNKNOWN" + ], + "x-order": 7 + }, + "process_exec_path": { + "type": "string", + "x-order": 8 + }, + "log_level": { + "description": "- LOG_LEVEL_UNSPECIFIED: Auto", + "type": "string", + "title": "Log level for exporters", + "default": "LOG_LEVEL_UNSPECIFIED", + "enum": [ + "LOG_LEVEL_UNSPECIFIED", + "LOG_LEVEL_FATAL", + "LOG_LEVEL_ERROR", + "LOG_LEVEL_WARN", + "LOG_LEVEL_INFO", + "LOG_LEVEL_DEBUG" + ], + "x-order": 9 + } + }, + "x-order": 19 } } } @@ -22704,6 +22900,19 @@ "description": "Connection timeout for exporter (if set).", "type": "string", "x-order": 33 + }, + "watch_logs": { + "description": "Watch this service's database log files and ship them to PMM Server.", + "type": "boolean", + "x-order": 34 + }, + "log_files": { + "description": "Absolute paths of the database log files to watch (e.g. the MySQL error log).", + "type": "array", + "items": { + "type": "string" + }, + "x-order": 35 } }, "x-order": 0 @@ -31286,6 +31495,11 @@ "type": "string", "title": "Duration for which an update is snoozed", "x-order": 18 + }, + "logs_retention": { + "description": "A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces).", + "type": "string", + "x-order": 19 } }, "x-order": 0 @@ -31468,6 +31682,11 @@ "description": "A number of full days for which an update is snoozed, i.e. a multiple of 24h: 2592000s, 43200m, 720h.", "type": "string", "x-order": 14 + }, + "logs_retention": { + "description": "A number of full days for log and trace data retention in ClickHouse. Should have a suffix in JSON: 2592000s, 43200m, 720h.", + "type": "string", + "x-order": 15 } } } @@ -31614,6 +31833,11 @@ "type": "string", "title": "Duration for which an update is snoozed", "x-order": 18 + }, + "logs_retention": { + "description": "A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces).", + "type": "string", + "x-order": 19 } }, "x-order": 0 diff --git a/api/uievents/v1/server.pb.go b/api/uievents/v1/server.pb.go index 41d144b9c29..dc995a6e8e5 100644 --- a/api/uievents/v1/server.pb.go +++ b/api/uievents/v1/server.pb.go @@ -480,7 +480,6 @@ var ( nil, // 6: uievents.v1.UserFlowEvent.ParamsEntry } ) - var file_uievents_v1_server_proto_depIdxs = []int32{ 6, // 0: uievents.v1.UserFlowEvent.params:type_name -> uievents.v1.UserFlowEvent.ParamsEntry 0, // 1: uievents.v1.StoreRequest.notifications:type_name -> uievents.v1.NotificationEvent diff --git a/api/user/v1/user.pb.go b/api/user/v1/user.pb.go index 12a954ca3f4..200364a0741 100644 --- a/api/user/v1/user.pb.go +++ b/api/user/v1/user.pb.go @@ -507,7 +507,6 @@ var ( (*timestamppb.Timestamp)(nil), // 7: google.protobuf.Timestamp } ) - var file_user_v1_user_proto_depIdxs = []int32{ 7, // 0: user.v1.GetUserResponse.snoozed_at:type_name -> google.protobuf.Timestamp 7, // 1: user.v1.UpdateUserResponse.snoozed_at:type_name -> google.protobuf.Timestamp diff --git a/managed/services/alerting/mock_grafana_client_test.go b/managed/services/alerting/mock_grafana_client_test.go index 9de5dfbf093..650407b6f25 100644 --- a/managed/services/alerting/mock_grafana_client_test.go +++ b/managed/services/alerting/mock_grafana_client_test.go @@ -78,7 +78,7 @@ func (_m *mockGrafanaClient) GetDatasourceUIDByName(ctx context.Context, name st if rf, ok := ret.Get(0).(func(context.Context, string) string); ok { r0 = rf(ctx, name) } else { - r0 = ret.Get(0).(string) //nolint:forcetypeassert + r0 = ret.Get(0).(string) } if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { From 2f579d86d3e9358a48c9fdb6f58f67f3231fdfba Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Wed, 3 Jun 2026 10:21:00 +0300 Subject: [PATCH 03/12] PMM-14689 Run make format --- api/accesscontrol/v1beta1/accesscontrol.pb.go | 1 + api/actions/v1/actions.pb.go | 1 + api/advisors/v1/advisors.pb.go | 1 + api/agent/v1/agent.pb.go | 1 + api/agent/v1/collector.pb.go | 1 + api/agentlocal/v1/agentlocal.pb.go | 1 + api/alerting/v1/alerting.pb.go | 1 + api/alerting/v1/params.pb.go | 1 + api/backup/v1/artifacts.pb.go | 1 + api/backup/v1/backup.pb.go | 1 + api/backup/v1/common.pb.go | 1 + api/backup/v1/errors.pb.go | 1 + api/backup/v1/locations.pb.go | 1 + api/backup/v1/restores.pb.go | 1 + api/common/common.pb.go | 1 + api/common/metrics_resolutions.pb.go | 1 + api/dump/v1beta1/dump.pb.go | 1 + api/extensions/v1/redact.pb.go | 1 + api/ha/v1beta1/ha.pb.go | 1 + api/inventory/v1/agent_status.pb.go | 1 + api/inventory/v1/agents.pb.go | 1 + api/inventory/v1/log_level.pb.go | 1 + api/inventory/v1/nodes.pb.go | 1 + api/inventory/v1/services.pb.go | 1 + api/logship/v1/logship.pb.go | 1 + api/management/v1/agent.pb.go | 1 + api/management/v1/annotation.pb.go | 1 + api/management/v1/azure.pb.go | 1 + api/management/v1/external.pb.go | 1 + api/management/v1/haproxy.pb.go | 1 + api/management/v1/metrics.pb.go | 1 + api/management/v1/mongodb.pb.go | 1 + api/management/v1/mysql.pb.go | 1 + api/management/v1/node.pb.go | 1 + api/management/v1/postgresql.pb.go | 1 + api/management/v1/proxysql.pb.go | 1 + api/management/v1/rds.pb.go | 1 + api/management/v1/service.pb.go | 1 + api/management/v1/severity.pb.go | 1 + api/management/v1/valkey.pb.go | 1 + api/qan/v1/collector.pb.go | 1 + api/qan/v1/filters.pb.go | 1 + api/qan/v1/object_details.pb.go | 1 + api/qan/v1/profile.pb.go | 1 + api/qan/v1/qan.pb.go | 1 + api/qan/v1/service.pb.go | 1 + api/realtimeanalytics/v1/collector.pb.go | 1 + api/realtimeanalytics/v1/query.pb.go | 1 + api/realtimeanalytics/v1/realtimeanalytics.pb.go | 1 + api/server/v1/httperror.pb.go | 1 + api/server/v1/server.pb.go | 1 + api/uievents/v1/server.pb.go | 1 + api/user/v1/user.pb.go | 1 + 53 files changed, 53 insertions(+) diff --git a/api/accesscontrol/v1beta1/accesscontrol.pb.go b/api/accesscontrol/v1beta1/accesscontrol.pb.go index ebec3bf05b7..f5e8ea4b004 100644 --- a/api/accesscontrol/v1beta1/accesscontrol.pb.go +++ b/api/accesscontrol/v1beta1/accesscontrol.pb.go @@ -844,6 +844,7 @@ var ( (*ListRolesResponse_RoleData)(nil), // 14: accesscontrol.v1beta1.ListRolesResponse.RoleData } ) + var file_accesscontrol_v1beta1_accesscontrol_proto_depIdxs = []int32{ 14, // 0: accesscontrol.v1beta1.ListRolesResponse.roles:type_name -> accesscontrol.v1beta1.ListRolesResponse.RoleData 0, // 1: accesscontrol.v1beta1.AccessControlService.CreateRole:input_type -> accesscontrol.v1beta1.CreateRoleRequest diff --git a/api/actions/v1/actions.pb.go b/api/actions/v1/actions.pb.go index 35461ae3739..f1cfdec8cfa 100644 --- a/api/actions/v1/actions.pb.go +++ b/api/actions/v1/actions.pb.go @@ -2649,6 +2649,7 @@ var ( (*StartServiceActionResponse)(nil), // 32: actions.v1.StartServiceActionResponse } ) + var file_actions_v1_actions_proto_depIdxs = []int32{ 3, // 0: actions.v1.StartServiceActionRequest.mysql_explain:type_name -> actions.v1.StartMySQLExplainActionParams 5, // 1: actions.v1.StartServiceActionRequest.mysql_explain_json:type_name -> actions.v1.StartMySQLExplainJSONActionParams diff --git a/api/advisors/v1/advisors.pb.go b/api/advisors/v1/advisors.pb.go index efbc083a3a9..3e4995415ad 100644 --- a/api/advisors/v1/advisors.pb.go +++ b/api/advisors/v1/advisors.pb.go @@ -1387,6 +1387,7 @@ var ( v1.Severity(0), // 22: management.v1.Severity } ) + var file_advisors_v1_advisors_proto_depIdxs = []int32{ 22, // 0: advisors.v1.AdvisorCheckResult.severity:type_name -> management.v1.Severity 20, // 1: advisors.v1.AdvisorCheckResult.labels:type_name -> advisors.v1.AdvisorCheckResult.LabelsEntry diff --git a/api/agent/v1/agent.pb.go b/api/agent/v1/agent.pb.go index 503643b1469..23241043050 100644 --- a/api/agent/v1/agent.pb.go +++ b/api/agent/v1/agent.pb.go @@ -7242,6 +7242,7 @@ var ( (*v11.Metadata)(nil), // 105: backup.v1.Metadata } ) + var file_agent_v1_agent_proto_depIdxs = []int32{ 44, // 0: agent.v1.TextFiles.files:type_name -> agent.v1.TextFiles.FilesEntry 94, // 1: agent.v1.Pong.current_time:type_name -> google.protobuf.Timestamp diff --git a/api/agent/v1/collector.pb.go b/api/agent/v1/collector.pb.go index da17db39c64..65633c05d17 100644 --- a/api/agent/v1/collector.pb.go +++ b/api/agent/v1/collector.pb.go @@ -2827,6 +2827,7 @@ var ( v1.AgentType(0), // 9: inventory.v1.AgentType } ) + var file_agent_v1_collector_proto_depIdxs = []int32{ 3, // 0: agent.v1.MetricsBucket.common:type_name -> agent.v1.MetricsBucket.Common 4, // 1: agent.v1.MetricsBucket.mysql:type_name -> agent.v1.MetricsBucket.MySQL diff --git a/api/agentlocal/v1/agentlocal.pb.go b/api/agentlocal/v1/agentlocal.pb.go index 12053d57921..7bb13a7cb58 100644 --- a/api/agentlocal/v1/agentlocal.pb.go +++ b/api/agentlocal/v1/agentlocal.pb.go @@ -485,6 +485,7 @@ var ( v1.AgentStatus(0), // 8: inventory.v1.AgentStatus } ) + var file_agentlocal_v1_agentlocal_proto_depIdxs = []int32{ 6, // 0: agentlocal.v1.ServerInfo.latency:type_name -> google.protobuf.Duration 6, // 1: agentlocal.v1.ServerInfo.clock_drift:type_name -> google.protobuf.Duration diff --git a/api/alerting/v1/alerting.pb.go b/api/alerting/v1/alerting.pb.go index bccb6659d24..3b2c47d73ec 100644 --- a/api/alerting/v1/alerting.pb.go +++ b/api/alerting/v1/alerting.pb.go @@ -1459,6 +1459,7 @@ var ( (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp } ) + var file_alerting_v1_alerting_proto_depIdxs = []int32{ 22, // 0: alerting.v1.ParamDefinition.unit:type_name -> alerting.v1.ParamUnit 23, // 1: alerting.v1.ParamDefinition.type:type_name -> alerting.v1.ParamType diff --git a/api/alerting/v1/params.pb.go b/api/alerting/v1/params.pb.go index eb001a606db..69d88497102 100644 --- a/api/alerting/v1/params.pb.go +++ b/api/alerting/v1/params.pb.go @@ -163,6 +163,7 @@ var ( ParamType(0), // 1: alerting.v1.ParamType } ) + var file_alerting_v1_params_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/backup/v1/artifacts.pb.go b/api/backup/v1/artifacts.pb.go index e2352f61cd1..dde03ceefef 100644 --- a/api/backup/v1/artifacts.pb.go +++ b/api/backup/v1/artifacts.pb.go @@ -656,6 +656,7 @@ var ( (*Metadata)(nil), // 12: backup.v1.Metadata } ) + var file_backup_v1_artifacts_proto_depIdxs = []int32{ 9, // 0: backup.v1.Artifact.data_model:type_name -> backup.v1.DataModel 0, // 1: backup.v1.Artifact.status:type_name -> backup.v1.BackupStatus diff --git a/api/backup/v1/backup.pb.go b/api/backup/v1/backup.pb.go index 19241fc6afd..4d587217600 100644 --- a/api/backup/v1/backup.pb.go +++ b/api/backup/v1/backup.pb.go @@ -1276,6 +1276,7 @@ var ( (*ListPitrTimerangesResponse)(nil), // 27: backup.v1.ListPitrTimerangesResponse } ) + var file_backup_v1_backup_proto_depIdxs = []int32{ 15, // 0: backup.v1.StartBackupRequest.retry_interval:type_name -> google.protobuf.Duration 16, // 1: backup.v1.StartBackupRequest.data_model:type_name -> backup.v1.DataModel diff --git a/api/backup/v1/common.pb.go b/api/backup/v1/common.pb.go index f84ca11de32..c8274024e38 100644 --- a/api/backup/v1/common.pb.go +++ b/api/backup/v1/common.pb.go @@ -423,6 +423,7 @@ var ( (*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp } ) + var file_backup_v1_common_proto_depIdxs = []int32{ 2, // 0: backup.v1.Metadata.file_list:type_name -> backup.v1.File 6, // 1: backup.v1.Metadata.restore_to:type_name -> google.protobuf.Timestamp diff --git a/api/backup/v1/errors.pb.go b/api/backup/v1/errors.pb.go index 5709e5ac243..902adc277c1 100644 --- a/api/backup/v1/errors.pb.go +++ b/api/backup/v1/errors.pb.go @@ -169,6 +169,7 @@ var ( (*Error)(nil), // 1: backup.v1.Error } ) + var file_backup_v1_errors_proto_depIdxs = []int32{ 0, // 0: backup.v1.Error.code:type_name -> backup.v1.ErrorCode 1, // [1:1] is the sub-list for method output_type diff --git a/api/backup/v1/locations.pb.go b/api/backup/v1/locations.pb.go index 72c13dece43..396b552ee80 100644 --- a/api/backup/v1/locations.pb.go +++ b/api/backup/v1/locations.pb.go @@ -833,6 +833,7 @@ var ( (*TestLocationConfigResponse)(nil), // 12: backup.v1.TestLocationConfigResponse } ) + var file_backup_v1_locations_proto_depIdxs = []int32{ 0, // 0: backup.v1.Location.filesystem_config:type_name -> backup.v1.FilesystemLocationConfig 1, // 1: backup.v1.Location.s3_config:type_name -> backup.v1.S3LocationConfig diff --git a/api/backup/v1/restores.pb.go b/api/backup/v1/restores.pb.go index 580c158b119..ee12d6b9285 100644 --- a/api/backup/v1/restores.pb.go +++ b/api/backup/v1/restores.pb.go @@ -625,6 +625,7 @@ var ( (*LogChunk)(nil), // 10: backup.v1.LogChunk } ) + var file_backup_v1_restores_proto_depIdxs = []int32{ 8, // 0: backup.v1.RestoreHistoryItem.data_model:type_name -> backup.v1.DataModel 0, // 1: backup.v1.RestoreHistoryItem.status:type_name -> backup.v1.RestoreStatus diff --git a/api/common/common.pb.go b/api/common/common.pb.go index 2303ccd29ab..0d05883daa1 100644 --- a/api/common/common.pb.go +++ b/api/common/common.pb.go @@ -147,6 +147,7 @@ var ( nil, // 2: common.StringMap.ValuesEntry } ) + var file_common_common_proto_depIdxs = []int32{ 2, // 0: common.StringMap.values:type_name -> common.StringMap.ValuesEntry 1, // [1:1] is the sub-list for method output_type diff --git a/api/common/metrics_resolutions.pb.go b/api/common/metrics_resolutions.pb.go index 389e4572992..75e587ba9a5 100644 --- a/api/common/metrics_resolutions.pb.go +++ b/api/common/metrics_resolutions.pb.go @@ -118,6 +118,7 @@ var ( (*durationpb.Duration)(nil), // 1: google.protobuf.Duration } ) + var file_common_metrics_resolutions_proto_depIdxs = []int32{ 1, // 0: common.MetricsResolutions.hr:type_name -> google.protobuf.Duration 1, // 1: common.MetricsResolutions.mr:type_name -> google.protobuf.Duration diff --git a/api/dump/v1beta1/dump.pb.go b/api/dump/v1beta1/dump.pb.go index 76f0e473adf..d031bce6b8f 100644 --- a/api/dump/v1beta1/dump.pb.go +++ b/api/dump/v1beta1/dump.pb.go @@ -897,6 +897,7 @@ var ( (*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp } ) + var file_dump_v1beta1_dump_proto_depIdxs = []int32{ 0, // 0: dump.v1beta1.Dump.status:type_name -> dump.v1beta1.DumpStatus 14, // 1: dump.v1beta1.Dump.start_time:type_name -> google.protobuf.Timestamp diff --git a/api/extensions/v1/redact.pb.go b/api/extensions/v1/redact.pb.go index c850a90df3c..738ce213118 100644 --- a/api/extensions/v1/redact.pb.go +++ b/api/extensions/v1/redact.pb.go @@ -135,6 +135,7 @@ var ( (*descriptorpb.FieldOptions)(nil), // 1: google.protobuf.FieldOptions } ) + var file_extensions_v1_redact_proto_depIdxs = []int32{ 1, // 0: extensions.v1.sensitive:extendee -> google.protobuf.FieldOptions 0, // 1: extensions.v1.sensitive:type_name -> extensions.v1.RedactType diff --git a/api/ha/v1beta1/ha.pb.go b/api/ha/v1beta1/ha.pb.go index 655996ccdbc..f798cccbcc0 100644 --- a/api/ha/v1beta1/ha.pb.go +++ b/api/ha/v1beta1/ha.pb.go @@ -351,6 +351,7 @@ var ( (*StatusResponse)(nil), // 5: ha.v1beta1.StatusResponse } ) + var file_ha_v1beta1_ha_proto_depIdxs = []int32{ 0, // 0: ha.v1beta1.HANode.role:type_name -> ha.v1beta1.NodeRole 2, // 1: ha.v1beta1.ListNodesResponse.nodes:type_name -> ha.v1beta1.HANode diff --git a/api/inventory/v1/agent_status.pb.go b/api/inventory/v1/agent_status.pb.go index ace1432a5e8..1e23074d2fc 100644 --- a/api/inventory/v1/agent_status.pb.go +++ b/api/inventory/v1/agent_status.pb.go @@ -128,6 +128,7 @@ var ( AgentStatus(0), // 0: inventory.v1.AgentStatus } ) + var file_inventory_v1_agent_status_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/inventory/v1/agents.pb.go b/api/inventory/v1/agents.pb.go index 536b7c17157..3caffa5b810 100644 --- a/api/inventory/v1/agents.pb.go +++ b/api/inventory/v1/agents.pb.go @@ -12747,6 +12747,7 @@ var ( (*common.StringMap)(nil), // 115: common.StringMap } ) + var file_inventory_v1_agents_proto_depIdxs = []int32{ 70, // 0: inventory.v1.PMMAgent.custom_labels:type_name -> inventory.v1.PMMAgent.CustomLabelsEntry 111, // 1: inventory.v1.VMAgent.status:type_name -> inventory.v1.AgentStatus diff --git a/api/inventory/v1/log_level.pb.go b/api/inventory/v1/log_level.pb.go index 47f0373d578..ff4d79ca3f2 100644 --- a/api/inventory/v1/log_level.pb.go +++ b/api/inventory/v1/log_level.pb.go @@ -114,6 +114,7 @@ var ( LogLevel(0), // 0: inventory.v1.LogLevel } ) + var file_inventory_v1_log_level_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/inventory/v1/nodes.pb.go b/api/inventory/v1/nodes.pb.go index e0186c91815..447663477a9 100644 --- a/api/inventory/v1/nodes.pb.go +++ b/api/inventory/v1/nodes.pb.go @@ -2043,6 +2043,7 @@ var ( nil, // 28: inventory.v1.AddRemoteAzureNodeParams.CustomLabelsEntry } ) + var file_inventory_v1_nodes_proto_depIdxs = []int32{ 19, // 0: inventory.v1.GenericNode.custom_labels:type_name -> inventory.v1.GenericNode.CustomLabelsEntry 20, // 1: inventory.v1.ContainerNode.custom_labels:type_name -> inventory.v1.ContainerNode.CustomLabelsEntry diff --git a/api/inventory/v1/services.pb.go b/api/inventory/v1/services.pb.go index 23eeeb28b81..a8d1519b61f 100644 --- a/api/inventory/v1/services.pb.go +++ b/api/inventory/v1/services.pb.go @@ -3334,6 +3334,7 @@ var ( (*common.StringMap)(nil), // 43: common.StringMap } ) + var file_inventory_v1_services_proto_depIdxs = []int32{ 27, // 0: inventory.v1.MySQLService.custom_labels:type_name -> inventory.v1.MySQLService.CustomLabelsEntry 28, // 1: inventory.v1.MySQLService.extra_dsn_params:type_name -> inventory.v1.MySQLService.ExtraDsnParamsEntry diff --git a/api/logship/v1/logship.pb.go b/api/logship/v1/logship.pb.go index af4d886bde7..2a3a90f1c3e 100644 --- a/api/logship/v1/logship.pb.go +++ b/api/logship/v1/logship.pb.go @@ -253,6 +253,7 @@ var ( (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp } ) + var file_logship_v1_logship_proto_depIdxs = []int32{ 5, // 0: logship.v1.LogRecord.time:type_name -> google.protobuf.Timestamp 3, // 1: logship.v1.LogRecord.attributes:type_name -> logship.v1.LogRecord.AttributesEntry diff --git a/api/management/v1/agent.pb.go b/api/management/v1/agent.pb.go index 8a745a48910..c76c750f869 100644 --- a/api/management/v1/agent.pb.go +++ b/api/management/v1/agent.pb.go @@ -1241,6 +1241,7 @@ var ( (*durationpb.Duration)(nil), // 17: google.protobuf.Duration } ) + var file_management_v1_agent_proto_depIdxs = []int32{ 8, // 0: management.v1.UniversalAgent.azure_options:type_name -> management.v1.UniversalAgent.AzureOptions 14, // 1: management.v1.UniversalAgent.created_at:type_name -> google.protobuf.Timestamp diff --git a/api/management/v1/annotation.pb.go b/api/management/v1/annotation.pb.go index 53bbe233c1b..ec781561e4c 100644 --- a/api/management/v1/annotation.pb.go +++ b/api/management/v1/annotation.pb.go @@ -164,6 +164,7 @@ var ( (*AddAnnotationResponse)(nil), // 1: management.v1.AddAnnotationResponse } ) + var file_management_v1_annotation_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/management/v1/azure.pb.go b/api/management/v1/azure.pb.go index 863cff6d5ab..04a05c47ec1 100644 --- a/api/management/v1/azure.pb.go +++ b/api/management/v1/azure.pb.go @@ -726,6 +726,7 @@ var ( (*durationpb.Duration)(nil), // 7: google.protobuf.Duration } ) + var file_management_v1_azure_proto_depIdxs = []int32{ 0, // 0: management.v1.DiscoverAzureDatabaseInstance.type:type_name -> management.v1.DiscoverAzureDatabaseType 2, // 1: management.v1.DiscoverAzureDatabaseResponse.azure_database_instance:type_name -> management.v1.DiscoverAzureDatabaseInstance diff --git a/api/management/v1/external.pb.go b/api/management/v1/external.pb.go index d990cb53abe..3632121e1c2 100644 --- a/api/management/v1/external.pb.go +++ b/api/management/v1/external.pb.go @@ -355,6 +355,7 @@ var ( (*v1.ExternalExporter)(nil), // 6: inventory.v1.ExternalExporter } ) + var file_management_v1_external_proto_depIdxs = []int32{ 3, // 0: management.v1.AddExternalServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddExternalServiceParams.custom_labels:type_name -> management.v1.AddExternalServiceParams.CustomLabelsEntry diff --git a/api/management/v1/haproxy.pb.go b/api/management/v1/haproxy.pb.go index 95cad534323..f3de5158762 100644 --- a/api/management/v1/haproxy.pb.go +++ b/api/management/v1/haproxy.pb.go @@ -333,6 +333,7 @@ var ( (*v1.ExternalExporter)(nil), // 6: inventory.v1.ExternalExporter } ) + var file_management_v1_haproxy_proto_depIdxs = []int32{ 3, // 0: management.v1.AddHAProxyServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddHAProxyServiceParams.custom_labels:type_name -> management.v1.AddHAProxyServiceParams.CustomLabelsEntry diff --git a/api/management/v1/metrics.pb.go b/api/management/v1/metrics.pb.go index b552c7955fb..748642db7cb 100644 --- a/api/management/v1/metrics.pb.go +++ b/api/management/v1/metrics.pb.go @@ -103,6 +103,7 @@ var ( MetricsMode(0), // 0: management.v1.MetricsMode } ) + var file_management_v1_metrics_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/management/v1/mongodb.pb.go b/api/management/v1/mongodb.pb.go index aad151306df..c25cc4f8282 100644 --- a/api/management/v1/mongodb.pb.go +++ b/api/management/v1/mongodb.pb.go @@ -559,6 +559,7 @@ var ( (*v1.RTAMongoDBAgent)(nil), // 11: inventory.v1.RTAMongoDBAgent } ) + var file_management_v1_mongodb_proto_depIdxs = []int32{ 3, // 0: management.v1.AddMongoDBServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddMongoDBServiceParams.custom_labels:type_name -> management.v1.AddMongoDBServiceParams.CustomLabelsEntry diff --git a/api/management/v1/mysql.pb.go b/api/management/v1/mysql.pb.go index 9cbe4962792..be69c07f41e 100644 --- a/api/management/v1/mysql.pb.go +++ b/api/management/v1/mysql.pb.go @@ -566,6 +566,7 @@ var ( (*v1.QANMySQLSlowlogAgent)(nil), // 11: inventory.v1.QANMySQLSlowlogAgent } ) + var file_management_v1_mysql_proto_depIdxs = []int32{ 4, // 0: management.v1.AddMySQLServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddMySQLServiceParams.custom_labels:type_name -> management.v1.AddMySQLServiceParams.CustomLabelsEntry diff --git a/api/management/v1/node.pb.go b/api/management/v1/node.pb.go index 53bb2be68db..149fb30ad94 100644 --- a/api/management/v1/node.pb.go +++ b/api/management/v1/node.pb.go @@ -1255,6 +1255,7 @@ var ( (*timestamppb.Timestamp)(nil), // 21: google.protobuf.Timestamp } ) + var file_management_v1_node_proto_depIdxs = []int32{ 16, // 0: management.v1.AddNodeParams.node_type:type_name -> inventory.v1.NodeType 11, // 1: management.v1.AddNodeParams.custom_labels:type_name -> management.v1.AddNodeParams.CustomLabelsEntry diff --git a/api/management/v1/postgresql.pb.go b/api/management/v1/postgresql.pb.go index 0e6f54ad033..0271ba48788 100644 --- a/api/management/v1/postgresql.pb.go +++ b/api/management/v1/postgresql.pb.go @@ -535,6 +535,7 @@ var ( (*v1.QANPostgreSQLPgStatMonitorAgent)(nil), // 10: inventory.v1.QANPostgreSQLPgStatMonitorAgent } ) + var file_management_v1_postgresql_proto_depIdxs = []int32{ 3, // 0: management.v1.AddPostgreSQLServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddPostgreSQLServiceParams.custom_labels:type_name -> management.v1.AddPostgreSQLServiceParams.CustomLabelsEntry diff --git a/api/management/v1/proxysql.pb.go b/api/management/v1/proxysql.pb.go index 7d9dbbcfc07..e3142ed85df 100644 --- a/api/management/v1/proxysql.pb.go +++ b/api/management/v1/proxysql.pb.go @@ -395,6 +395,7 @@ var ( (*v1.ProxySQLExporter)(nil), // 8: inventory.v1.ProxySQLExporter } ) + var file_management_v1_proxysql_proto_depIdxs = []int32{ 3, // 0: management.v1.AddProxySQLServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddProxySQLServiceParams.custom_labels:type_name -> management.v1.AddProxySQLServiceParams.CustomLabelsEntry diff --git a/api/management/v1/rds.pb.go b/api/management/v1/rds.pb.go index fb882ea8de5..d338efd3738 100644 --- a/api/management/v1/rds.pb.go +++ b/api/management/v1/rds.pb.go @@ -854,6 +854,7 @@ var ( (*v1.QANPostgreSQLPgStatementsAgent)(nil), // 16: inventory.v1.QANPostgreSQLPgStatementsAgent } ) + var file_management_v1_rds_proto_depIdxs = []int32{ 0, // 0: management.v1.DiscoverRDSInstance.engine:type_name -> management.v1.DiscoverRDSEngine 1, // 1: management.v1.DiscoverRDSResponse.rds_instances:type_name -> management.v1.DiscoverRDSInstance diff --git a/api/management/v1/service.pb.go b/api/management/v1/service.pb.go index 6ea52fbc973..cbad04b7f53 100644 --- a/api/management/v1/service.pb.go +++ b/api/management/v1/service.pb.go @@ -1005,6 +1005,7 @@ var ( (*AddAzureDatabaseResponse)(nil), // 47: management.v1.AddAzureDatabaseResponse } ) + var file_management_v1_service_proto_depIdxs = []int32{ 9, // 0: management.v1.AddServiceRequest.mysql:type_name -> management.v1.AddMySQLServiceParams 10, // 1: management.v1.AddServiceRequest.mongodb:type_name -> management.v1.AddMongoDBServiceParams diff --git a/api/management/v1/severity.pb.go b/api/management/v1/severity.pb.go index 51c04a93a0e..6a14d366aa6 100644 --- a/api/management/v1/severity.pb.go +++ b/api/management/v1/severity.pb.go @@ -125,6 +125,7 @@ var ( Severity(0), // 0: management.v1.Severity } ) + var file_management_v1_severity_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/management/v1/valkey.pb.go b/api/management/v1/valkey.pb.go index 26cc4db7f99..a0fc2f73fe2 100644 --- a/api/management/v1/valkey.pb.go +++ b/api/management/v1/valkey.pb.go @@ -417,6 +417,7 @@ var ( (*v1.ValkeyExporter)(nil), // 8: inventory.v1.ValkeyExporter } ) + var file_management_v1_valkey_proto_depIdxs = []int32{ 3, // 0: management.v1.AddValkeyServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddValkeyServiceParams.custom_labels:type_name -> management.v1.AddValkeyServiceParams.CustomLabelsEntry diff --git a/api/qan/v1/collector.pb.go b/api/qan/v1/collector.pb.go index 3716a3a24d1..b680bbd8f77 100644 --- a/api/qan/v1/collector.pb.go +++ b/api/qan/v1/collector.pb.go @@ -2757,6 +2757,7 @@ var ( ExampleType(0), // 7: qan.v1.ExampleType } ) + var file_qan_v1_collector_proto_depIdxs = []int32{ 1, // 0: qan.v1.CollectRequest.metrics_bucket:type_name -> qan.v1.MetricsBucket 6, // 1: qan.v1.MetricsBucket.agent_type:type_name -> inventory.v1.AgentType diff --git a/api/qan/v1/filters.pb.go b/api/qan/v1/filters.pb.go index 390a687dbc4..fcbf5e7aead 100644 --- a/api/qan/v1/filters.pb.go +++ b/api/qan/v1/filters.pb.go @@ -293,6 +293,7 @@ var ( (*MapFieldEntry)(nil), // 6: qan.v1.MapFieldEntry } ) + var file_qan_v1_filters_proto_depIdxs = []int32{ 5, // 0: qan.v1.GetFilteredMetricsNamesRequest.period_start_from:type_name -> google.protobuf.Timestamp 5, // 1: qan.v1.GetFilteredMetricsNamesRequest.period_start_to:type_name -> google.protobuf.Timestamp diff --git a/api/qan/v1/object_details.pb.go b/api/qan/v1/object_details.pb.go index 53e6c06150b..f004bc0ec60 100644 --- a/api/qan/v1/object_details.pb.go +++ b/api/qan/v1/object_details.pb.go @@ -1645,6 +1645,7 @@ var ( ExampleType(0), // 29: qan.v1.ExampleType } ) + var file_qan_v1_object_details_proto_depIdxs = []int32{ 26, // 0: qan.v1.GetMetricsRequest.period_start_from:type_name -> google.protobuf.Timestamp 26, // 1: qan.v1.GetMetricsRequest.period_start_to:type_name -> google.protobuf.Timestamp diff --git a/api/qan/v1/profile.pb.go b/api/qan/v1/profile.pb.go index 7700b76dcd3..03ab97e871a 100644 --- a/api/qan/v1/profile.pb.go +++ b/api/qan/v1/profile.pb.go @@ -598,6 +598,7 @@ var ( (*Point)(nil), // 8: qan.v1.Point } ) + var file_qan_v1_profile_proto_depIdxs = []int32{ 7, // 0: qan.v1.GetReportRequest.period_start_from:type_name -> google.protobuf.Timestamp 7, // 1: qan.v1.GetReportRequest.period_start_to:type_name -> google.protobuf.Timestamp diff --git a/api/qan/v1/qan.pb.go b/api/qan/v1/qan.pb.go index 2d37431a7c0..c1d3bc6bb2e 100644 --- a/api/qan/v1/qan.pb.go +++ b/api/qan/v1/qan.pb.go @@ -1000,6 +1000,7 @@ var ( (*MapFieldEntry)(nil), // 2: qan.v1.MapFieldEntry } ) + var file_qan_v1_qan_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/qan/v1/service.pb.go b/api/qan/v1/service.pb.go index c5c688d9000..0e52423aa51 100644 --- a/api/qan/v1/service.pb.go +++ b/api/qan/v1/service.pb.go @@ -258,6 +258,7 @@ var ( (*GetQueryExampleResponse)(nil), // 24: qan.v1.GetQueryExampleResponse } ) + var file_qan_v1_service_proto_depIdxs = []int32{ 4, // 0: qan.v1.GetMetricsNamesResponse.data:type_name -> qan.v1.GetMetricsNamesResponse.DataEntry 5, // 1: qan.v1.QANService.GetReport:input_type -> qan.v1.GetReportRequest diff --git a/api/realtimeanalytics/v1/collector.pb.go b/api/realtimeanalytics/v1/collector.pb.go index b9b81466e7c..f149de0a6cf 100644 --- a/api/realtimeanalytics/v1/collector.pb.go +++ b/api/realtimeanalytics/v1/collector.pb.go @@ -140,6 +140,7 @@ var ( (*QueryData)(nil), // 2: realtimeanalytics.v1.QueryData } ) + var file_realtimeanalytics_v1_collector_proto_depIdxs = []int32{ 2, // 0: realtimeanalytics.v1.CollectRequest.queries:type_name -> realtimeanalytics.v1.QueryData 0, // 1: realtimeanalytics.v1.CollectorService.Collect:input_type -> realtimeanalytics.v1.CollectRequest diff --git a/api/realtimeanalytics/v1/query.pb.go b/api/realtimeanalytics/v1/query.pb.go index b9ab1809d9a..43c4a1bdd5c 100644 --- a/api/realtimeanalytics/v1/query.pb.go +++ b/api/realtimeanalytics/v1/query.pb.go @@ -331,6 +331,7 @@ var ( (*durationpb.Duration)(nil), // 3: google.protobuf.Duration } ) + var file_realtimeanalytics_v1_query_proto_depIdxs = []int32{ 2, // 0: realtimeanalytics.v1.QueryMongoDBData.operation_start_time:type_name -> google.protobuf.Timestamp 3, // 1: realtimeanalytics.v1.QueryData.query_execution_duration:type_name -> google.protobuf.Duration diff --git a/api/realtimeanalytics/v1/realtimeanalytics.pb.go b/api/realtimeanalytics/v1/realtimeanalytics.pb.go index bd339f4bad9..8dbdbf8ccff 100644 --- a/api/realtimeanalytics/v1/realtimeanalytics.pb.go +++ b/api/realtimeanalytics/v1/realtimeanalytics.pb.go @@ -718,6 +718,7 @@ var ( (*QueryData)(nil), // 16: realtimeanalytics.v1.QueryData } ) + var file_realtimeanalytics_v1_realtimeanalytics_proto_depIdxs = []int32{ 12, // 0: realtimeanalytics.v1.ListServicesRequest.service_type:type_name -> inventory.v1.ServiceType 13, // 1: realtimeanalytics.v1.ListServicesResponse.mongodb:type_name -> inventory.v1.MongoDBService diff --git a/api/server/v1/httperror.pb.go b/api/server/v1/httperror.pb.go index ef269ba2292..8778ad26272 100644 --- a/api/server/v1/httperror.pb.go +++ b/api/server/v1/httperror.pb.go @@ -127,6 +127,7 @@ var ( (*anypb.Any)(nil), // 1: google.protobuf.Any } ) + var file_server_v1_httperror_proto_depIdxs = []int32{ 1, // 0: server.v1.HttpError.details:type_name -> google.protobuf.Any 1, // [1:1] is the sub-list for method output_type diff --git a/api/server/v1/server.pb.go b/api/server/v1/server.pb.go index dc7a4ad833e..508283b564d 100644 --- a/api/server/v1/server.pb.go +++ b/api/server/v1/server.pb.go @@ -1972,6 +1972,7 @@ var ( (*common.StringArray)(nil), // 29: common.StringArray } ) + var file_server_v1_server_proto_depIdxs = []int32{ 27, // 0: server.v1.VersionInfo.timestamp:type_name -> google.protobuf.Timestamp 1, // 1: server.v1.VersionResponse.server:type_name -> server.v1.VersionInfo diff --git a/api/uievents/v1/server.pb.go b/api/uievents/v1/server.pb.go index dc995a6e8e5..41d144b9c29 100644 --- a/api/uievents/v1/server.pb.go +++ b/api/uievents/v1/server.pb.go @@ -480,6 +480,7 @@ var ( nil, // 6: uievents.v1.UserFlowEvent.ParamsEntry } ) + var file_uievents_v1_server_proto_depIdxs = []int32{ 6, // 0: uievents.v1.UserFlowEvent.params:type_name -> uievents.v1.UserFlowEvent.ParamsEntry 0, // 1: uievents.v1.StoreRequest.notifications:type_name -> uievents.v1.NotificationEvent diff --git a/api/user/v1/user.pb.go b/api/user/v1/user.pb.go index 200364a0741..12a954ca3f4 100644 --- a/api/user/v1/user.pb.go +++ b/api/user/v1/user.pb.go @@ -507,6 +507,7 @@ var ( (*timestamppb.Timestamp)(nil), // 7: google.protobuf.Timestamp } ) + var file_user_v1_user_proto_depIdxs = []int32{ 7, // 0: user.v1.GetUserResponse.snoozed_at:type_name -> google.protobuf.Timestamp 7, // 1: user.v1.UpdateUserResponse.snoozed_at:type_name -> google.protobuf.Timestamp From f3a4d1befe78c26c93d8220a101e296147dc1e1d Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Wed, 3 Jun 2026 10:26:43 +0300 Subject: [PATCH 04/12] PMM-14689 Fix unit tests for new LogsRetention setting and agent column - settings_helpers_test: include LogsRetention default (30d) in expected Settings. - handler_test (TestCheckPortChanged): add the new log_watcher_options column to agentColumns and to each sqlmock AddRow so reform can scan the agent row. Co-Authored-By: Claude Opus 4.8 --- managed/models/settings_helpers_test.go | 2 ++ managed/services/agents/handler_test.go | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/managed/models/settings_helpers_test.go b/managed/models/settings_helpers_test.go index cfa2c9c7727..965e85e4cee 100644 --- a/managed/models/settings_helpers_test.go +++ b/managed/models/settings_helpers_test.go @@ -44,6 +44,7 @@ func TestSettings(t *testing.T) { LR: time.Minute, }, DataRetention: 30 * 24 * time.Hour, + LogsRetention: 30 * 24 * time.Hour, AWSPartitions: []string{"aws"}, SaaS: models.Advisors{ AdvisorRunIntervals: models.AdvisorsRunIntervals{ @@ -70,6 +71,7 @@ func TestSettings(t *testing.T) { LR: time.Minute, }, DataRetention: 30 * 24 * time.Hour, + LogsRetention: 30 * 24 * time.Hour, AWSPartitions: []string{"aws"}, SaaS: models.Advisors{ AdvisorRunIntervals: models.AdvisorsRunIntervals{ diff --git a/managed/services/agents/handler_test.go b/managed/services/agents/handler_test.go index f1096c4e73e..2e5fd9a2159 100644 --- a/managed/services/agents/handler_test.go +++ b/managed/services/agents/handler_test.go @@ -39,6 +39,7 @@ func TestCheckPortChanged(t *testing.T) { "username", "password", "agent_password", "tls", "tls_skip_verify", "log_level", "exporter_options", "qan_options", "rta_options", "aws_options", "azure_options", "mongo_options", "mysql_options", "postgresql_options", "valkey_options", + "log_watcher_options", } t.Run("returns false when agent not found", func(t *testing.T) { @@ -111,6 +112,7 @@ func TestCheckPortChanged(t *testing.T) { `{}`, // mysql_options `{}`, // postgresql_options `{}`, // valkey_options + `{}`, // log_watcher_options )) changed := checkPortChanged(db.Querier, "test-agent-1", 8080) @@ -166,6 +168,7 @@ func TestCheckPortChanged(t *testing.T) { `{}`, // mysql_options `{}`, // postgresql_options `{}`, // valkey_options + `{}`, // log_watcher_options )) changed := checkPortChanged(db.Querier, "test-agent-2", 8080) @@ -221,6 +224,7 @@ func TestCheckPortChanged(t *testing.T) { `{}`, // mysql_options `{}`, // postgresql_options `{}`, // valkey_options + `{}`, // log_watcher_options )) changed := checkPortChanged(db.Querier, "test-agent-3", 9090) @@ -276,6 +280,7 @@ func TestCheckPortChanged(t *testing.T) { `{}`, // mysql_options `{}`, // postgresql_options `{}`, // valkey_options + `{}`, // log_watcher_options )) // Test with the same port passed as uint32 @@ -293,7 +298,7 @@ func TestCheckPortChanged(t *testing.T) { time.Now(), time.Now(), false, "", 42000, nil, nil, false, nil, nil, nil, false, false, nil, - `{}`, `{}`, `{}`, `{}`, `{}`, `{}`, `{}`, `{}`, `{}`, + `{}`, `{}`, `{}`, `{}`, `{}`, `{}`, `{}`, `{}`, `{}`, `{}`, )) // Test with different port From 93eb7b03c46a2c3d28408f4244b29e9c691a5bc7 Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Wed, 3 Jun 2026 10:56:46 +0300 Subject: [PATCH 05/12] PMM-14689 Address linter findings in new logging/tracing code Fix the golangci-lint findings reported on the PR for the new code: - funcorder: order exported methods before unexported (dbwatcher, logship_channel). - unparam: dbwatcher.New no longer returns an always-nil error. - godot: capitalize toplevel doc-comment sentences (clickhouse, alerting). - noctx: clickhouse ApplyTTL uses ExecContext (ctx threaded through callers). - nolintlint: drop the unused //nolint:errcheck in alerting. - depguard: use stdlib "errors"/fmt instead of github.com/pkg/errors in the new files (clickhouse, otelcol_config, dbwatcher). - noinlineerr / embeddedstructfieldcheck / errorsastype: minor cleanups in the new files. Co-Authored-By: Claude Opus 4.8 --- agent/agents/logs/dbwatcher/dbwatcher.go | 30 ++++---- agent/agents/logs/dbwatcher/dbwatcher_test.go | 8 +-- agent/agents/supervisor/supervisor.go | 2 +- agent/client/channel/logship_channel.go | 68 +++++++++---------- managed/cmd/pmm-managed/main.go | 2 +- managed/services/alerting/service.go | 4 +- managed/services/clickhouse/clickhouse.go | 41 +++++------ managed/services/logship/service.go | 7 +- managed/services/server/deps.go | 2 +- managed/services/server/server.go | 2 +- .../services/supervisord/otelcol_config.go | 19 +++--- 11 files changed, 95 insertions(+), 90 deletions(-) diff --git a/agent/agents/logs/dbwatcher/dbwatcher.go b/agent/agents/logs/dbwatcher/dbwatcher.go index 14d86dce459..005891a49e0 100644 --- a/agent/agents/logs/dbwatcher/dbwatcher.go +++ b/agent/agents/logs/dbwatcher/dbwatcher.go @@ -18,12 +18,12 @@ package dbwatcher import ( "context" + "fmt" "path/filepath" "strings" "sync" "time" - "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus" "github.com/sirupsen/logrus" "google.golang.org/protobuf/types/known/timestamppb" @@ -66,12 +66,12 @@ type DBLogWatcher struct { } // New creates a new database log-watcher agent. -func New(params *Params, l *logrus.Entry) (*DBLogWatcher, error) { +func New(params *Params, l *logrus.Entry) *DBLogWatcher { return &DBLogWatcher{ params: params, l: l, changes: make(chan agents.Change, 100), //nolint:mnd - }, nil + } } // Run tails the configured files until ctx is canceled. @@ -110,6 +110,17 @@ func (s *DBLogWatcher) Run(ctx context.Context) { wg.Wait() } +// Changes returns the channel of agent changes. +func (s *DBLogWatcher) Changes() <-chan agents.Change { + return s.changes +} + +// Describe implements prometheus.Collector. +func (s *DBLogWatcher) Describe(chan<- *prometheus.Desc) {} + +// Collect implements prometheus.Collector. +func (s *DBLogWatcher) Collect(chan<- prometheus.Metric) {} + // watchFile tails a single file, reopening it (with backoff) until ctx is canceled. func (s *DBLogWatcher) watchFile(ctx context.Context, path, logType string) { b := backoff.New(backoffMinDelay, backoffMaxDelay) @@ -196,7 +207,7 @@ func (s *DBLogWatcher) validatePath(p string) (string, error) { } } if !allowed { - return "", errors.Errorf("path %q is not within an allowed directory", resolved) + return "", fmt.Errorf("path %q is not within an allowed directory", resolved) } } return resolved, nil @@ -211,16 +222,5 @@ func pathWithin(path, dir string) bool { return rel != ".." && !strings.HasPrefix(rel, ".."+string(filepath.Separator)) } -// Changes returns the channel of agent changes. -func (s *DBLogWatcher) Changes() <-chan agents.Change { - return s.changes -} - -// Describe implements prometheus.Collector. -func (s *DBLogWatcher) Describe(chan<- *prometheus.Desc) {} - -// Collect implements prometheus.Collector. -func (s *DBLogWatcher) Collect(chan<- prometheus.Metric) {} - // check interface. var _ agents.BuiltinAgent = (*DBLogWatcher)(nil) diff --git a/agent/agents/logs/dbwatcher/dbwatcher_test.go b/agent/agents/logs/dbwatcher/dbwatcher_test.go index 53735746a16..92787fe851e 100644 --- a/agent/agents/logs/dbwatcher/dbwatcher_test.go +++ b/agent/agents/logs/dbwatcher/dbwatcher_test.go @@ -31,14 +31,13 @@ func TestDBLogWatcherTailsAndShips(t *testing.T) { logPath := filepath.Join(dir, "error.log") require.NoError(t, os.WriteFile(logPath, []byte("preexisting line\n"), 0o600)) - w, err := New(&Params{ + w := New(&Params{ AgentID: "agent-1", ServiceID: "service-1", ServiceName: "mysql-svc", DBSystem: "mysql", Files: []WatchedFile{{Path: logPath, Type: "error"}}, }, logrus.WithField("test", t.Name())) - require.NoError(t, err) ctx, cancel := context.WithTimeout(t.Context(), 10*time.Second) defer cancel() @@ -75,12 +74,11 @@ func TestDBLogWatcherTailsAndShips(t *testing.T) { } func TestDBLogWatcherAllowlistRejectsOutsidePaths(t *testing.T) { - w, err := New(&Params{ + w := New(&Params{ Files: []WatchedFile{{Path: "/etc/shadow", Type: "error"}}, AllowedDirs: []string{t.TempDir()}, }, logrus.WithField("test", t.Name())) - require.NoError(t, err) - _, err = w.validatePath("/etc/shadow") + _, err := w.validatePath("/etc/shadow") require.Error(t, err) } diff --git a/agent/agents/supervisor/supervisor.go b/agent/agents/supervisor/supervisor.go index 71966727c72..230a615f655 100644 --- a/agent/agents/supervisor/supervisor.go +++ b/agent/agents/supervisor/supervisor.go @@ -712,7 +712,7 @@ func (s *Supervisor) startBuiltin(agentID string, builtinAgent *agentv1.SetState DBSystem: builtinAgent.DbSystem, Files: files, } - agent, err = dbwatcher.New(params, l) + agent = dbwatcher.New(params, l) case type_TEST_NOOP: agent = noop.New() diff --git a/agent/client/channel/logship_channel.go b/agent/client/channel/logship_channel.go index 64bff9bcdbf..54c0b77619f 100644 --- a/agent/client/channel/logship_channel.go +++ b/agent/client/channel/logship_channel.go @@ -68,40 +68,6 @@ func NewLogShipChannel(stream logshipv1.LogShipService_ShipClient) *LogShipChann return c } -// runHealthPing sends an empty ShipRequest periodically to keep the stream alive during quiet periods, -// the same way RTAChannel does. -func (c *LogShipChannel) runHealthPing() { - pingReq := &logshipv1.ShipRequest{} - - ticker := time.NewTicker(pingInterval) - defer ticker.Stop() - - for { - select { - case <-c.closeWait: - return - case <-ticker.C: - c.Send(pingReq) - } - } -} - -func (c *LogShipChannel) close(err error) { - c.closeOnce.Do(func() { - c.l.Debugf("Closing with error: %+v", err) - c.closeErr = err - - c.sendM.Lock() - _, closeErr := c.s.CloseAndRecv() - if closeErr != nil { - c.l.Errorf("Failed to receive final response: %v", closeErr) - } - - close(c.closeWait) - c.sendM.Unlock() - }) -} - // Wait blocks until the channel is closed and returns the reason why it was closed. func (c *LogShipChannel) Wait() error { <-c.closeWait @@ -141,6 +107,40 @@ func (c *LogShipChannel) Collect(ch chan<- prometheus.Metric) { c.mSend.Collect(ch) } +// runHealthPing sends an empty ShipRequest periodically to keep the stream alive during quiet periods, +// the same way RTAChannel does. +func (c *LogShipChannel) runHealthPing() { + pingReq := &logshipv1.ShipRequest{} + + ticker := time.NewTicker(pingInterval) + defer ticker.Stop() + + for { + select { + case <-c.closeWait: + return + case <-ticker.C: + c.Send(pingReq) + } + } +} + +func (c *LogShipChannel) close(err error) { + c.closeOnce.Do(func() { + c.l.Debugf("Closing with error: %+v", err) + c.closeErr = err + + c.sendM.Lock() + _, closeErr := c.s.CloseAndRecv() + if closeErr != nil { + c.l.Errorf("Failed to receive final response: %v", closeErr) + } + + close(c.closeWait) + c.sendM.Unlock() + }) +} + // check interfaces. var ( _ prometheus.Collector = (*LogShipChannel)(nil) diff --git a/managed/cmd/pmm-managed/main.go b/managed/cmd/pmm-managed/main.go index 3b4d211adc2..098122eafef 100644 --- a/managed/cmd/pmm-managed/main.go +++ b/managed/cmd/pmm-managed/main.go @@ -1019,7 +1019,7 @@ func main() { //nolint:gocognit,maintidx,cyclop l.Errorf("Could not load settings for initial logs retention TTL: %s", err) return } - if err := logsClickhouse.ApplyTTL(settings.LogsRetention); err != nil { + if err := logsClickhouse.ApplyTTL(ctx, settings.LogsRetention); err != nil { l.Errorf("Could not apply initial logs retention TTL: %s", err) } }() diff --git a/managed/services/alerting/service.go b/managed/services/alerting/service.go index 43deb4634c7..1886328f498 100644 --- a/managed/services/alerting/service.go +++ b/managed/services/alerting/service.go @@ -739,7 +739,7 @@ const ( clickhouseDatasourceName = "ClickHouseLogs" clickhouseDatasourceType = "grafana-clickhouse-datasource" exprDatasourceUID = "__expr__" - // logAlertTimeRange is the relative time window (seconds) over which the log query is evaluated. + // Relative time window in seconds over which the ClickHouse log query is evaluated. logAlertTimeRange = 300 ) @@ -754,7 +754,7 @@ func (s *Service) clickhouseGrafanaAlert(ctx context.Context, title, rawSQL stri var threshold float64 if v, ok := params.AsStringMap()["threshold"]; ok { - threshold, _ = strconv.ParseFloat(v, 64) //nolint:errcheck + threshold, _ = strconv.ParseFloat(v, 64) } return services.GrafanaAlert{ diff --git a/managed/services/clickhouse/clickhouse.go b/managed/services/clickhouse/clickhouse.go index e03cf6fb69e..f61bb97ade0 100644 --- a/managed/services/clickhouse/clickhouse.go +++ b/managed/services/clickhouse/clickhouse.go @@ -23,6 +23,7 @@ import ( "context" "database/sql" "embed" + "errors" "fmt" "io" "net/url" @@ -33,7 +34,6 @@ import ( "github.com/golang-migrate/migrate/v4" _ "github.com/golang-migrate/migrate/v4/database/clickhouse" // register golang-migrate clickhouse driver bindata "github.com/golang-migrate/migrate/v4/source/go_bindata" - "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/percona/pmm/managed/utils/envvars" @@ -65,8 +65,8 @@ type Service struct { l *logrus.Entry } -// New returns a ClickHouse logs/traces lifecycle service. db is reused for DDL (TTL); golang-migrate -// opens its own connection from a DSN built out of the same connection parameters. +// New returns a ClickHouse logs/traces lifecycle service. The db handle is reused for DDL (TTL); +// golang-migrate opens its own connection from a DSN built out of the same connection parameters. func New(db *sql.DB, addr, database, user, password string) *Service { isCluster, _ := strconv.ParseBool(envvars.GetEnv("PMM_CLICKHOUSE_IS_CLUSTER", "false")) dsn := url.URL{ @@ -95,9 +95,9 @@ func (s *Service) Bootstrap(ctx context.Context) error { s.l.Info("logs/traces schema is up to date") return nil case !errors.Is(err, errNotReady): - return errors.Wrap(err, "logs/traces migrations failed") + return fmt.Errorf("logs/traces migrations failed: %w", err) case attempt >= migrateMaxAttempts: - return errors.Wrapf(err, "ClickHouse still not ready after %d attempts", attempt) + return fmt.Errorf("ClickHouse still not ready after %d attempts: %w", attempt, err) } s.l.Warnf("ClickHouse not ready (attempt %d/%d), retrying in %s: %s", attempt, migrateMaxAttempts, migrateRetryInterval, err) @@ -118,7 +118,7 @@ func (s *Service) Migrate() error { entries, err := migrationsFS.ReadDir("migrations/sql") if err != nil { - return errors.WithStack(err) + return err } names := make([]string, 0, len(entries)) for _, e := range entries { @@ -135,7 +135,8 @@ func (s *Service) Migrate() error { return nil, err } var buf bytes.Buffer - if err := tmpl.Execute(&buf, data); err != nil { + err = tmpl.Execute(&buf, data) + if err != nil { return nil, err } return buf.Bytes(), nil @@ -143,7 +144,7 @@ func (s *Service) Migrate() error { src, err := bindata.WithInstance(res) if err != nil { - return errors.WithStack(err) + return err } dsn, err := s.dsnForMigrate() @@ -165,36 +166,38 @@ func (s *Service) Migrate() error { } // Recover from a dirty migration state by forcing back one version and retrying (PMM-14305). - var errDirty *migrate.ErrDirty - if errors.As(err, &errDirty) { + if errDirty, ok := errors.AsType[*migrate.ErrDirty](err); ok { s.l.Warnf("Migration %d left the schema dirty, attempting recovery...", errDirty.Version) ver := errDirty.Version - 1 if ver == 0 { ver = -1 // golang-migrate's "no migration applied" sentinel. } - if ferr := m.Force(ver); ferr != nil { - return errors.Wrapf(ferr, "can't force migration %d", ver) + ferr := m.Force(ver) + if ferr != nil { + return fmt.Errorf("can't force migration %d: %w", ver, ferr) } - if uerr := m.Up(); uerr != nil && !errors.Is(uerr, migrate.ErrNoChange) && !errors.Is(uerr, io.EOF) { - return errors.WithStack(uerr) + uerr := m.Up() + if uerr != nil && !errors.Is(uerr, migrate.ErrNoChange) && !errors.Is(uerr, io.EOF) { + return uerr } return nil } - return errors.WithStack(err) + return err } // ApplyTTL sets the retention TTL on the logs and traces tables. In cluster mode the DDL is replicated // automatically by the Replicated `pmm` database engine, so no ON CLUSTER clause is needed. -func (s *Service) ApplyTTL(retention time.Duration) error { +func (s *Service) ApplyTTL(ctx context.Context, retention time.Duration) error { days := max(int(retention.Hours())/24, 1) //nolint:mnd stmts := []string{ fmt.Sprintf("ALTER TABLE %s.logs MODIFY TTL TimestampTime + INTERVAL %d DAY", s.database, days), fmt.Sprintf("ALTER TABLE %s.traces MODIFY TTL toDateTime(Timestamp) + INTERVAL %d DAY", s.database, days), } for _, stmt := range stmts { - if _, err := s.db.Exec(stmt); err != nil { - return errors.Wrapf(err, "failed to apply TTL (%q)", stmt) + _, err := s.db.ExecContext(ctx, stmt) + if err != nil { + return fmt.Errorf("failed to apply TTL (%q): %w", stmt, err) } s.l.Infof("Applied retention TTL: %s", stmt) } @@ -211,7 +214,7 @@ func (s *Service) engine() string { func (s *Service) dsnForMigrate() (string, error) { u, err := url.Parse(s.migrateDSN) if err != nil { - return "", errors.WithStack(err) + return "", err } q := u.Query() q.Set("x-migrations-table", migrationsTable) diff --git a/managed/services/logship/service.go b/managed/services/logship/service.go index 174ebd2fbf3..037b7044586 100644 --- a/managed/services/logship/service.go +++ b/managed/services/logship/service.go @@ -46,12 +46,12 @@ const exportTimeout = 10 * time.Second // Service implements the LogShipService gRPC server. type Service struct { + logshipv1.UnimplementedLogShipServiceServer + db *reform.DB endpoint string client *http.Client l *logrus.Entry - - logshipv1.UnimplementedLogShipServiceServer } // New creates a new log-shipping service forwarding to the given OTLP/HTTP logs endpoint. @@ -105,7 +105,8 @@ func (s *Service) Ship(stream grpc.ClientStreamingServer[logshipv1.ShipRequest, // Log shipping is best-effort: on a forwarding error we drop the batch and keep the stream open // rather than disconnecting the agent, since the collector outage is usually transient. - if err := s.export(streamCtx, agentMD.ID, msg); err != nil { + err = s.export(streamCtx, agentMD.ID, msg) + if err != nil { s.l.Warnf("Failed to forward %d log records to the collector: %s", len(msg.Records), err) } } diff --git a/managed/services/server/deps.go b/managed/services/server/deps.go index c78042dbd4a..d2bed5b74f5 100644 --- a/managed/services/server/deps.go +++ b/managed/services/server/deps.go @@ -120,5 +120,5 @@ type nomadService interface { // logsClickhouseService applies the log/trace retention TTL to the ClickHouse logs/traces tables. type logsClickhouseService interface { - ApplyTTL(retention time.Duration) error + ApplyTTL(ctx context.Context, retention time.Duration) error } diff --git a/managed/services/server/server.go b/managed/services/server/server.go index 33193a01868..b3ad8931d1d 100644 --- a/managed/services/server/server.go +++ b/managed/services/server/server.go @@ -744,7 +744,7 @@ func (s *Server) ChangeSettings(ctx context.Context, req *serverv1.ChangeSetting // Apply the log/trace retention TTL to ClickHouse when it changes (instant, no qan-api2 restart). if s.logsClickhouse != nil && oldSettings.LogsRetention != newSettings.LogsRetention { - if err := s.logsClickhouse.ApplyTTL(newSettings.LogsRetention); err != nil { + if err := s.logsClickhouse.ApplyTTL(ctx, newSettings.LogsRetention); err != nil { s.l.Errorf("Failed to apply logs retention TTL: %s", err) } } diff --git a/managed/services/supervisord/otelcol_config.go b/managed/services/supervisord/otelcol_config.go index fdd0ecf631d..7d4df69a0df 100644 --- a/managed/services/supervisord/otelcol_config.go +++ b/managed/services/supervisord/otelcol_config.go @@ -17,12 +17,12 @@ package supervisord import ( "bytes" + "fmt" "os" "path/filepath" "strings" "text/template" - "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/percona/pmm/managed/utils/envvars" @@ -40,11 +40,13 @@ func SaveOtelcolConfig() error { if err != nil { return err } - if err := os.MkdirAll(filepath.Dir(otelcolConfig), 0o755); err != nil { //nolint:gosec,mnd - return errors.Wrapf(err, "failed to create otelcol config directory") + err = os.MkdirAll(filepath.Dir(otelcolConfig), 0o755) //nolint:gosec,mnd + if err != nil { + return fmt.Errorf("failed to create otelcol config directory: %w", err) } - if err := saveConfig(otelcolConfig, cfg); err != nil { - return errors.Wrapf(err, "failed to save otelcol config") + err = saveConfig(otelcolConfig, cfg) + if err != nil { + return fmt.Errorf("failed to save otelcol config: %w", err) } logrus.Info("otelcol config.yaml has been updated.") return nil @@ -54,7 +56,7 @@ func marshalOtelcolConfig() ([]byte, error) { clickhouseAddr := envvars.GetEnv("PMM_CLICKHOUSE_ADDR", defaultClickhouseAddr) clickhouseAddrPair := strings.SplitN(clickhouseAddr, ":", 2) //nolint:mnd if len(clickhouseAddrPair) != 2 { //nolint:mnd - return nil, errors.Errorf("unexpected PMM_CLICKHOUSE_ADDR format: %q", clickhouseAddr) + return nil, fmt.Errorf("unexpected PMM_CLICKHOUSE_ADDR format: %q", clickhouseAddr) } params := map[string]any{ @@ -66,8 +68,9 @@ func marshalOtelcolConfig() ([]byte, error) { } var buf bytes.Buffer - if err := otelcolTemplate.Execute(&buf, params); err != nil { - return nil, errors.Wrapf(err, "failed to render otelcol template") + err := otelcolTemplate.Execute(&buf, params) + if err != nil { + return nil, fmt.Errorf("failed to render otelcol template: %w", err) } return buf.Bytes(), nil } From 9c564d1149712e2a4ca4dc6421d42bdb27b427c7 Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Wed, 3 Jun 2026 13:11:38 +0300 Subject: [PATCH 06/12] PMM-14689 Register db-log-watcher in AgentTypeName map TestAgentTypes iterates every AgentType enum value through types.AgentTypeName, which panics on unmapped types. Add the AGENT_TYPE_DB_LOG_WATCHER_AGENT constant and its display name so the new agent type is handled. Co-Authored-By: Claude Opus 4.8 --- api/inventory/v1/types/agent_types.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/api/inventory/v1/types/agent_types.go b/api/inventory/v1/types/agent_types.go index 7cffa997238..f35643a17c0 100644 --- a/api/inventory/v1/types/agent_types.go +++ b/api/inventory/v1/types/agent_types.go @@ -39,6 +39,7 @@ const ( AgentTypeExternalExporter = "AGENT_TYPE_EXTERNAL_EXPORTER" AgentTypeAzureDatabaseExporter = "AGENT_TYPE_AZURE_DATABASE_EXPORTER" AgentTypeRTAMongoDBAgent = "AGENT_TYPE_RTA_MONGODB_AGENT" + AgentTypeDBLogWatcherAgent = "AGENT_TYPE_DB_LOG_WATCHER_AGENT" ) var agentTypeNames = map[string]string{ @@ -62,6 +63,7 @@ var agentTypeNames = map[string]string{ AgentTypeExternalExporter: "external-exporter", AgentTypeAzureDatabaseExporter: "azure_database_exporter", AgentTypeRTAMongoDBAgent: "rta_mongodb_agent", + AgentTypeDBLogWatcherAgent: "db_log_watcher_agent", } // AgentTypeName returns human friendly agent type to be used in reports. From 72f6ad606708cd03dfc8df0691f20b6e2c099ec9 Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Thu, 4 Jun 2026 02:52:59 +0300 Subject: [PATCH 07/12] PMM-14689 Rename LogsRetention to LogRetention --- agent/agents/supervisor/supervisor.go | 14 ++++----- api/accesscontrol/v1beta1/accesscontrol.pb.go | 1 - api/actions/v1/actions.pb.go | 1 - api/advisors/v1/advisors.pb.go | 1 - api/agent/v1/agent.pb.go | 1 - api/agent/v1/collector.pb.go | 1 - api/agentlocal/v1/agentlocal.pb.go | 1 - api/alerting/v1/alerting.pb.go | 1 - api/alerting/v1/params.pb.go | 1 - api/backup/v1/artifacts.pb.go | 1 - api/backup/v1/backup.pb.go | 1 - api/backup/v1/common.pb.go | 1 - api/backup/v1/errors.pb.go | 1 - api/backup/v1/locations.pb.go | 1 - api/backup/v1/restores.pb.go | 1 - api/common/common.pb.go | 1 - api/common/metrics_resolutions.pb.go | 1 - api/descriptor.bin | Bin 826500 -> 826496 bytes api/dump/v1beta1/dump.pb.go | 1 - api/extensions/v1/redact.pb.go | 1 - api/ha/v1beta1/ha.pb.go | 1 - api/inventory/v1/agent_status.pb.go | 1 - api/inventory/v1/agents.pb.go | 1 - api/inventory/v1/log_level.pb.go | 1 - api/inventory/v1/nodes.pb.go | 1 - api/inventory/v1/services.pb.go | 1 - api/logship/v1/logship.pb.go | 1 - api/management/v1/agent.pb.go | 1 - api/management/v1/annotation.pb.go | 1 - api/management/v1/azure.pb.go | 1 - api/management/v1/external.pb.go | 1 - api/management/v1/haproxy.pb.go | 1 - api/management/v1/metrics.pb.go | 1 - api/management/v1/mongodb.pb.go | 1 - api/management/v1/mysql.pb.go | 1 - api/management/v1/node.pb.go | 1 - api/management/v1/postgresql.pb.go | 1 - api/management/v1/proxysql.pb.go | 1 - api/management/v1/rds.pb.go | 1 - api/management/v1/service.pb.go | 1 - api/management/v1/severity.pb.go | 1 - api/management/v1/valkey.pb.go | 1 - api/qan/v1/collector.pb.go | 1 - api/qan/v1/filters.pb.go | 1 - api/qan/v1/object_details.pb.go | 1 - api/qan/v1/profile.pb.go | 1 - api/qan/v1/qan.pb.go | 1 - api/qan/v1/service.pb.go | 1 - api/realtimeanalytics/v1/collector.pb.go | 1 - api/realtimeanalytics/v1/query.pb.go | 1 - .../v1/realtimeanalytics.pb.go | 1 - api/server/v1/httperror.pb.go | 1 - .../change_settings_responses.go | 4 +-- .../server_service/get_settings_responses.go | 2 +- api/server/v1/json/v1.json | 6 ++-- api/server/v1/server.pb.go | 29 +++++++++--------- api/server/v1/server.pb.validate.go | 20 ++++++------ api/server/v1/server.proto | 4 +-- api/swagger/swagger-dev.json | 6 ++-- api/swagger/swagger.json | 6 ++-- api/uievents/v1/server.pb.go | 1 - api/user/v1/user.pb.go | 1 - managed/cmd/pmm-managed/main.go | 2 +- managed/models/settings.go | 8 ++--- managed/models/settings_helpers.go | 16 +++++----- managed/models/settings_helpers_test.go | 4 +-- managed/services/server/server.go | 8 ++--- 67 files changed, 64 insertions(+), 117 deletions(-) diff --git a/agent/agents/supervisor/supervisor.go b/agent/agents/supervisor/supervisor.go index 230a615f655..9e9234ac8e0 100644 --- a/agent/agents/supervisor/supervisor.go +++ b/agent/agents/supervisor/supervisor.go @@ -27,7 +27,6 @@ import ( "sync" "time" - "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus" "github.com/sirupsen/logrus" "google.golang.org/protobuf/proto" @@ -234,8 +233,8 @@ func (s *Supervisor) RTARequests() <-chan *rtav1.CollectRequest { return s.rtaRequests } -// LogRequests returns the channel with log records to be shipped to pmm-managed. It must be read until -// it is closed. +// LogRequests returns the channel with log records to be shipped to pmm-managed. +// It must be read until it is closed. func (s *Supervisor) LogRequests() <-chan *logshipv1.ShipRequest { return s.logRequests } @@ -263,7 +262,8 @@ func (w *logShipWriter) Write(b []byte) (int, error) { } select { case w.ch <- req: - default: // drop to never block agent logging + // drop to never block agent logging + default: } } return len(b), nil @@ -718,7 +718,7 @@ func (s *Supervisor) startBuiltin(agentID string, builtinAgent *agentv1.SetState agent = noop.New() default: - err = errors.Errorf("unhandled agent type %[1]s (%[1]d)", builtinAgent.Type) + err = fmt.Errorf("unhandled agent type %[1]s (%[1]d)", builtinAgent.Type) } if err != nil { @@ -858,11 +858,11 @@ func (s *Supervisor) processParams(agentID string, agentProcess *agentv1.SetStat processParams.Path = cfg.Paths.Nomad processParams.Env = append(processParams.Env, os.Environ()...) default: - return nil, errors.Errorf("unhandled agent type %[1]s (%[1]d).", agentProcess.Type) //nolint:revive + return nil, fmt.Errorf("unhandled agent type %[1]s (%[1]d).", agentProcess.Type) //nolint:revive } if processParams.Path == "" { - return nil, errors.Errorf("no path for agent type %[1]s (%[1]d).", agentProcess.Type) //nolint:revive + return nil, fmt.Errorf("no path for agent type %[1]s (%[1]d).", agentProcess.Type) //nolint:revive } tr := &templates.TemplateRenderer{ diff --git a/api/accesscontrol/v1beta1/accesscontrol.pb.go b/api/accesscontrol/v1beta1/accesscontrol.pb.go index f5e8ea4b004..ebec3bf05b7 100644 --- a/api/accesscontrol/v1beta1/accesscontrol.pb.go +++ b/api/accesscontrol/v1beta1/accesscontrol.pb.go @@ -844,7 +844,6 @@ var ( (*ListRolesResponse_RoleData)(nil), // 14: accesscontrol.v1beta1.ListRolesResponse.RoleData } ) - var file_accesscontrol_v1beta1_accesscontrol_proto_depIdxs = []int32{ 14, // 0: accesscontrol.v1beta1.ListRolesResponse.roles:type_name -> accesscontrol.v1beta1.ListRolesResponse.RoleData 0, // 1: accesscontrol.v1beta1.AccessControlService.CreateRole:input_type -> accesscontrol.v1beta1.CreateRoleRequest diff --git a/api/actions/v1/actions.pb.go b/api/actions/v1/actions.pb.go index f1cfdec8cfa..35461ae3739 100644 --- a/api/actions/v1/actions.pb.go +++ b/api/actions/v1/actions.pb.go @@ -2649,7 +2649,6 @@ var ( (*StartServiceActionResponse)(nil), // 32: actions.v1.StartServiceActionResponse } ) - var file_actions_v1_actions_proto_depIdxs = []int32{ 3, // 0: actions.v1.StartServiceActionRequest.mysql_explain:type_name -> actions.v1.StartMySQLExplainActionParams 5, // 1: actions.v1.StartServiceActionRequest.mysql_explain_json:type_name -> actions.v1.StartMySQLExplainJSONActionParams diff --git a/api/advisors/v1/advisors.pb.go b/api/advisors/v1/advisors.pb.go index 3e4995415ad..efbc083a3a9 100644 --- a/api/advisors/v1/advisors.pb.go +++ b/api/advisors/v1/advisors.pb.go @@ -1387,7 +1387,6 @@ var ( v1.Severity(0), // 22: management.v1.Severity } ) - var file_advisors_v1_advisors_proto_depIdxs = []int32{ 22, // 0: advisors.v1.AdvisorCheckResult.severity:type_name -> management.v1.Severity 20, // 1: advisors.v1.AdvisorCheckResult.labels:type_name -> advisors.v1.AdvisorCheckResult.LabelsEntry diff --git a/api/agent/v1/agent.pb.go b/api/agent/v1/agent.pb.go index 23241043050..503643b1469 100644 --- a/api/agent/v1/agent.pb.go +++ b/api/agent/v1/agent.pb.go @@ -7242,7 +7242,6 @@ var ( (*v11.Metadata)(nil), // 105: backup.v1.Metadata } ) - var file_agent_v1_agent_proto_depIdxs = []int32{ 44, // 0: agent.v1.TextFiles.files:type_name -> agent.v1.TextFiles.FilesEntry 94, // 1: agent.v1.Pong.current_time:type_name -> google.protobuf.Timestamp diff --git a/api/agent/v1/collector.pb.go b/api/agent/v1/collector.pb.go index 65633c05d17..da17db39c64 100644 --- a/api/agent/v1/collector.pb.go +++ b/api/agent/v1/collector.pb.go @@ -2827,7 +2827,6 @@ var ( v1.AgentType(0), // 9: inventory.v1.AgentType } ) - var file_agent_v1_collector_proto_depIdxs = []int32{ 3, // 0: agent.v1.MetricsBucket.common:type_name -> agent.v1.MetricsBucket.Common 4, // 1: agent.v1.MetricsBucket.mysql:type_name -> agent.v1.MetricsBucket.MySQL diff --git a/api/agentlocal/v1/agentlocal.pb.go b/api/agentlocal/v1/agentlocal.pb.go index 7bb13a7cb58..12053d57921 100644 --- a/api/agentlocal/v1/agentlocal.pb.go +++ b/api/agentlocal/v1/agentlocal.pb.go @@ -485,7 +485,6 @@ var ( v1.AgentStatus(0), // 8: inventory.v1.AgentStatus } ) - var file_agentlocal_v1_agentlocal_proto_depIdxs = []int32{ 6, // 0: agentlocal.v1.ServerInfo.latency:type_name -> google.protobuf.Duration 6, // 1: agentlocal.v1.ServerInfo.clock_drift:type_name -> google.protobuf.Duration diff --git a/api/alerting/v1/alerting.pb.go b/api/alerting/v1/alerting.pb.go index 3b2c47d73ec..bccb6659d24 100644 --- a/api/alerting/v1/alerting.pb.go +++ b/api/alerting/v1/alerting.pb.go @@ -1459,7 +1459,6 @@ var ( (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp } ) - var file_alerting_v1_alerting_proto_depIdxs = []int32{ 22, // 0: alerting.v1.ParamDefinition.unit:type_name -> alerting.v1.ParamUnit 23, // 1: alerting.v1.ParamDefinition.type:type_name -> alerting.v1.ParamType diff --git a/api/alerting/v1/params.pb.go b/api/alerting/v1/params.pb.go index 69d88497102..eb001a606db 100644 --- a/api/alerting/v1/params.pb.go +++ b/api/alerting/v1/params.pb.go @@ -163,7 +163,6 @@ var ( ParamType(0), // 1: alerting.v1.ParamType } ) - var file_alerting_v1_params_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/backup/v1/artifacts.pb.go b/api/backup/v1/artifacts.pb.go index dde03ceefef..e2352f61cd1 100644 --- a/api/backup/v1/artifacts.pb.go +++ b/api/backup/v1/artifacts.pb.go @@ -656,7 +656,6 @@ var ( (*Metadata)(nil), // 12: backup.v1.Metadata } ) - var file_backup_v1_artifacts_proto_depIdxs = []int32{ 9, // 0: backup.v1.Artifact.data_model:type_name -> backup.v1.DataModel 0, // 1: backup.v1.Artifact.status:type_name -> backup.v1.BackupStatus diff --git a/api/backup/v1/backup.pb.go b/api/backup/v1/backup.pb.go index 4d587217600..19241fc6afd 100644 --- a/api/backup/v1/backup.pb.go +++ b/api/backup/v1/backup.pb.go @@ -1276,7 +1276,6 @@ var ( (*ListPitrTimerangesResponse)(nil), // 27: backup.v1.ListPitrTimerangesResponse } ) - var file_backup_v1_backup_proto_depIdxs = []int32{ 15, // 0: backup.v1.StartBackupRequest.retry_interval:type_name -> google.protobuf.Duration 16, // 1: backup.v1.StartBackupRequest.data_model:type_name -> backup.v1.DataModel diff --git a/api/backup/v1/common.pb.go b/api/backup/v1/common.pb.go index c8274024e38..f84ca11de32 100644 --- a/api/backup/v1/common.pb.go +++ b/api/backup/v1/common.pb.go @@ -423,7 +423,6 @@ var ( (*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp } ) - var file_backup_v1_common_proto_depIdxs = []int32{ 2, // 0: backup.v1.Metadata.file_list:type_name -> backup.v1.File 6, // 1: backup.v1.Metadata.restore_to:type_name -> google.protobuf.Timestamp diff --git a/api/backup/v1/errors.pb.go b/api/backup/v1/errors.pb.go index 902adc277c1..5709e5ac243 100644 --- a/api/backup/v1/errors.pb.go +++ b/api/backup/v1/errors.pb.go @@ -169,7 +169,6 @@ var ( (*Error)(nil), // 1: backup.v1.Error } ) - var file_backup_v1_errors_proto_depIdxs = []int32{ 0, // 0: backup.v1.Error.code:type_name -> backup.v1.ErrorCode 1, // [1:1] is the sub-list for method output_type diff --git a/api/backup/v1/locations.pb.go b/api/backup/v1/locations.pb.go index 396b552ee80..72c13dece43 100644 --- a/api/backup/v1/locations.pb.go +++ b/api/backup/v1/locations.pb.go @@ -833,7 +833,6 @@ var ( (*TestLocationConfigResponse)(nil), // 12: backup.v1.TestLocationConfigResponse } ) - var file_backup_v1_locations_proto_depIdxs = []int32{ 0, // 0: backup.v1.Location.filesystem_config:type_name -> backup.v1.FilesystemLocationConfig 1, // 1: backup.v1.Location.s3_config:type_name -> backup.v1.S3LocationConfig diff --git a/api/backup/v1/restores.pb.go b/api/backup/v1/restores.pb.go index ee12d6b9285..580c158b119 100644 --- a/api/backup/v1/restores.pb.go +++ b/api/backup/v1/restores.pb.go @@ -625,7 +625,6 @@ var ( (*LogChunk)(nil), // 10: backup.v1.LogChunk } ) - var file_backup_v1_restores_proto_depIdxs = []int32{ 8, // 0: backup.v1.RestoreHistoryItem.data_model:type_name -> backup.v1.DataModel 0, // 1: backup.v1.RestoreHistoryItem.status:type_name -> backup.v1.RestoreStatus diff --git a/api/common/common.pb.go b/api/common/common.pb.go index 0d05883daa1..2303ccd29ab 100644 --- a/api/common/common.pb.go +++ b/api/common/common.pb.go @@ -147,7 +147,6 @@ var ( nil, // 2: common.StringMap.ValuesEntry } ) - var file_common_common_proto_depIdxs = []int32{ 2, // 0: common.StringMap.values:type_name -> common.StringMap.ValuesEntry 1, // [1:1] is the sub-list for method output_type diff --git a/api/common/metrics_resolutions.pb.go b/api/common/metrics_resolutions.pb.go index 75e587ba9a5..389e4572992 100644 --- a/api/common/metrics_resolutions.pb.go +++ b/api/common/metrics_resolutions.pb.go @@ -118,7 +118,6 @@ var ( (*durationpb.Duration)(nil), // 1: google.protobuf.Duration } ) - var file_common_metrics_resolutions_proto_depIdxs = []int32{ 1, // 0: common.MetricsResolutions.hr:type_name -> google.protobuf.Duration 1, // 1: common.MetricsResolutions.mr:type_name -> google.protobuf.Duration diff --git a/api/descriptor.bin b/api/descriptor.bin index 2455a0f32cd0e6e62ad852efd2f2246b7fb5343b..e82d0be1b9afbf24d8910858e9f228924e0fc67b 100644 GIT binary patch delta 182 zcmZqKY19BjEsQNpEzB(}EvzkUE$l5EEu1Y}E!4Ob zCrChpiz%ph^jE^PnXZ+$rsS% z;^ksx5n>W%7Gl}OsH3-iUM5d77qh-p?R3RV9@puaB|L6WMG{Q>Kt(@5iuRZA98?DY D;TAAb diff --git a/api/dump/v1beta1/dump.pb.go b/api/dump/v1beta1/dump.pb.go index d031bce6b8f..76f0e473adf 100644 --- a/api/dump/v1beta1/dump.pb.go +++ b/api/dump/v1beta1/dump.pb.go @@ -897,7 +897,6 @@ var ( (*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp } ) - var file_dump_v1beta1_dump_proto_depIdxs = []int32{ 0, // 0: dump.v1beta1.Dump.status:type_name -> dump.v1beta1.DumpStatus 14, // 1: dump.v1beta1.Dump.start_time:type_name -> google.protobuf.Timestamp diff --git a/api/extensions/v1/redact.pb.go b/api/extensions/v1/redact.pb.go index 738ce213118..c850a90df3c 100644 --- a/api/extensions/v1/redact.pb.go +++ b/api/extensions/v1/redact.pb.go @@ -135,7 +135,6 @@ var ( (*descriptorpb.FieldOptions)(nil), // 1: google.protobuf.FieldOptions } ) - var file_extensions_v1_redact_proto_depIdxs = []int32{ 1, // 0: extensions.v1.sensitive:extendee -> google.protobuf.FieldOptions 0, // 1: extensions.v1.sensitive:type_name -> extensions.v1.RedactType diff --git a/api/ha/v1beta1/ha.pb.go b/api/ha/v1beta1/ha.pb.go index f798cccbcc0..655996ccdbc 100644 --- a/api/ha/v1beta1/ha.pb.go +++ b/api/ha/v1beta1/ha.pb.go @@ -351,7 +351,6 @@ var ( (*StatusResponse)(nil), // 5: ha.v1beta1.StatusResponse } ) - var file_ha_v1beta1_ha_proto_depIdxs = []int32{ 0, // 0: ha.v1beta1.HANode.role:type_name -> ha.v1beta1.NodeRole 2, // 1: ha.v1beta1.ListNodesResponse.nodes:type_name -> ha.v1beta1.HANode diff --git a/api/inventory/v1/agent_status.pb.go b/api/inventory/v1/agent_status.pb.go index 1e23074d2fc..ace1432a5e8 100644 --- a/api/inventory/v1/agent_status.pb.go +++ b/api/inventory/v1/agent_status.pb.go @@ -128,7 +128,6 @@ var ( AgentStatus(0), // 0: inventory.v1.AgentStatus } ) - var file_inventory_v1_agent_status_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/inventory/v1/agents.pb.go b/api/inventory/v1/agents.pb.go index 3caffa5b810..536b7c17157 100644 --- a/api/inventory/v1/agents.pb.go +++ b/api/inventory/v1/agents.pb.go @@ -12747,7 +12747,6 @@ var ( (*common.StringMap)(nil), // 115: common.StringMap } ) - var file_inventory_v1_agents_proto_depIdxs = []int32{ 70, // 0: inventory.v1.PMMAgent.custom_labels:type_name -> inventory.v1.PMMAgent.CustomLabelsEntry 111, // 1: inventory.v1.VMAgent.status:type_name -> inventory.v1.AgentStatus diff --git a/api/inventory/v1/log_level.pb.go b/api/inventory/v1/log_level.pb.go index ff4d79ca3f2..47f0373d578 100644 --- a/api/inventory/v1/log_level.pb.go +++ b/api/inventory/v1/log_level.pb.go @@ -114,7 +114,6 @@ var ( LogLevel(0), // 0: inventory.v1.LogLevel } ) - var file_inventory_v1_log_level_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/inventory/v1/nodes.pb.go b/api/inventory/v1/nodes.pb.go index 447663477a9..e0186c91815 100644 --- a/api/inventory/v1/nodes.pb.go +++ b/api/inventory/v1/nodes.pb.go @@ -2043,7 +2043,6 @@ var ( nil, // 28: inventory.v1.AddRemoteAzureNodeParams.CustomLabelsEntry } ) - var file_inventory_v1_nodes_proto_depIdxs = []int32{ 19, // 0: inventory.v1.GenericNode.custom_labels:type_name -> inventory.v1.GenericNode.CustomLabelsEntry 20, // 1: inventory.v1.ContainerNode.custom_labels:type_name -> inventory.v1.ContainerNode.CustomLabelsEntry diff --git a/api/inventory/v1/services.pb.go b/api/inventory/v1/services.pb.go index a8d1519b61f..23eeeb28b81 100644 --- a/api/inventory/v1/services.pb.go +++ b/api/inventory/v1/services.pb.go @@ -3334,7 +3334,6 @@ var ( (*common.StringMap)(nil), // 43: common.StringMap } ) - var file_inventory_v1_services_proto_depIdxs = []int32{ 27, // 0: inventory.v1.MySQLService.custom_labels:type_name -> inventory.v1.MySQLService.CustomLabelsEntry 28, // 1: inventory.v1.MySQLService.extra_dsn_params:type_name -> inventory.v1.MySQLService.ExtraDsnParamsEntry diff --git a/api/logship/v1/logship.pb.go b/api/logship/v1/logship.pb.go index 2a3a90f1c3e..af4d886bde7 100644 --- a/api/logship/v1/logship.pb.go +++ b/api/logship/v1/logship.pb.go @@ -253,7 +253,6 @@ var ( (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp } ) - var file_logship_v1_logship_proto_depIdxs = []int32{ 5, // 0: logship.v1.LogRecord.time:type_name -> google.protobuf.Timestamp 3, // 1: logship.v1.LogRecord.attributes:type_name -> logship.v1.LogRecord.AttributesEntry diff --git a/api/management/v1/agent.pb.go b/api/management/v1/agent.pb.go index c76c750f869..8a745a48910 100644 --- a/api/management/v1/agent.pb.go +++ b/api/management/v1/agent.pb.go @@ -1241,7 +1241,6 @@ var ( (*durationpb.Duration)(nil), // 17: google.protobuf.Duration } ) - var file_management_v1_agent_proto_depIdxs = []int32{ 8, // 0: management.v1.UniversalAgent.azure_options:type_name -> management.v1.UniversalAgent.AzureOptions 14, // 1: management.v1.UniversalAgent.created_at:type_name -> google.protobuf.Timestamp diff --git a/api/management/v1/annotation.pb.go b/api/management/v1/annotation.pb.go index ec781561e4c..53bbe233c1b 100644 --- a/api/management/v1/annotation.pb.go +++ b/api/management/v1/annotation.pb.go @@ -164,7 +164,6 @@ var ( (*AddAnnotationResponse)(nil), // 1: management.v1.AddAnnotationResponse } ) - var file_management_v1_annotation_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/management/v1/azure.pb.go b/api/management/v1/azure.pb.go index 04a05c47ec1..863cff6d5ab 100644 --- a/api/management/v1/azure.pb.go +++ b/api/management/v1/azure.pb.go @@ -726,7 +726,6 @@ var ( (*durationpb.Duration)(nil), // 7: google.protobuf.Duration } ) - var file_management_v1_azure_proto_depIdxs = []int32{ 0, // 0: management.v1.DiscoverAzureDatabaseInstance.type:type_name -> management.v1.DiscoverAzureDatabaseType 2, // 1: management.v1.DiscoverAzureDatabaseResponse.azure_database_instance:type_name -> management.v1.DiscoverAzureDatabaseInstance diff --git a/api/management/v1/external.pb.go b/api/management/v1/external.pb.go index 3632121e1c2..d990cb53abe 100644 --- a/api/management/v1/external.pb.go +++ b/api/management/v1/external.pb.go @@ -355,7 +355,6 @@ var ( (*v1.ExternalExporter)(nil), // 6: inventory.v1.ExternalExporter } ) - var file_management_v1_external_proto_depIdxs = []int32{ 3, // 0: management.v1.AddExternalServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddExternalServiceParams.custom_labels:type_name -> management.v1.AddExternalServiceParams.CustomLabelsEntry diff --git a/api/management/v1/haproxy.pb.go b/api/management/v1/haproxy.pb.go index f3de5158762..95cad534323 100644 --- a/api/management/v1/haproxy.pb.go +++ b/api/management/v1/haproxy.pb.go @@ -333,7 +333,6 @@ var ( (*v1.ExternalExporter)(nil), // 6: inventory.v1.ExternalExporter } ) - var file_management_v1_haproxy_proto_depIdxs = []int32{ 3, // 0: management.v1.AddHAProxyServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddHAProxyServiceParams.custom_labels:type_name -> management.v1.AddHAProxyServiceParams.CustomLabelsEntry diff --git a/api/management/v1/metrics.pb.go b/api/management/v1/metrics.pb.go index 748642db7cb..b552c7955fb 100644 --- a/api/management/v1/metrics.pb.go +++ b/api/management/v1/metrics.pb.go @@ -103,7 +103,6 @@ var ( MetricsMode(0), // 0: management.v1.MetricsMode } ) - var file_management_v1_metrics_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/management/v1/mongodb.pb.go b/api/management/v1/mongodb.pb.go index c25cc4f8282..aad151306df 100644 --- a/api/management/v1/mongodb.pb.go +++ b/api/management/v1/mongodb.pb.go @@ -559,7 +559,6 @@ var ( (*v1.RTAMongoDBAgent)(nil), // 11: inventory.v1.RTAMongoDBAgent } ) - var file_management_v1_mongodb_proto_depIdxs = []int32{ 3, // 0: management.v1.AddMongoDBServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddMongoDBServiceParams.custom_labels:type_name -> management.v1.AddMongoDBServiceParams.CustomLabelsEntry diff --git a/api/management/v1/mysql.pb.go b/api/management/v1/mysql.pb.go index be69c07f41e..9cbe4962792 100644 --- a/api/management/v1/mysql.pb.go +++ b/api/management/v1/mysql.pb.go @@ -566,7 +566,6 @@ var ( (*v1.QANMySQLSlowlogAgent)(nil), // 11: inventory.v1.QANMySQLSlowlogAgent } ) - var file_management_v1_mysql_proto_depIdxs = []int32{ 4, // 0: management.v1.AddMySQLServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddMySQLServiceParams.custom_labels:type_name -> management.v1.AddMySQLServiceParams.CustomLabelsEntry diff --git a/api/management/v1/node.pb.go b/api/management/v1/node.pb.go index 149fb30ad94..53bb2be68db 100644 --- a/api/management/v1/node.pb.go +++ b/api/management/v1/node.pb.go @@ -1255,7 +1255,6 @@ var ( (*timestamppb.Timestamp)(nil), // 21: google.protobuf.Timestamp } ) - var file_management_v1_node_proto_depIdxs = []int32{ 16, // 0: management.v1.AddNodeParams.node_type:type_name -> inventory.v1.NodeType 11, // 1: management.v1.AddNodeParams.custom_labels:type_name -> management.v1.AddNodeParams.CustomLabelsEntry diff --git a/api/management/v1/postgresql.pb.go b/api/management/v1/postgresql.pb.go index 0271ba48788..0e6f54ad033 100644 --- a/api/management/v1/postgresql.pb.go +++ b/api/management/v1/postgresql.pb.go @@ -535,7 +535,6 @@ var ( (*v1.QANPostgreSQLPgStatMonitorAgent)(nil), // 10: inventory.v1.QANPostgreSQLPgStatMonitorAgent } ) - var file_management_v1_postgresql_proto_depIdxs = []int32{ 3, // 0: management.v1.AddPostgreSQLServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddPostgreSQLServiceParams.custom_labels:type_name -> management.v1.AddPostgreSQLServiceParams.CustomLabelsEntry diff --git a/api/management/v1/proxysql.pb.go b/api/management/v1/proxysql.pb.go index e3142ed85df..7d9dbbcfc07 100644 --- a/api/management/v1/proxysql.pb.go +++ b/api/management/v1/proxysql.pb.go @@ -395,7 +395,6 @@ var ( (*v1.ProxySQLExporter)(nil), // 8: inventory.v1.ProxySQLExporter } ) - var file_management_v1_proxysql_proto_depIdxs = []int32{ 3, // 0: management.v1.AddProxySQLServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddProxySQLServiceParams.custom_labels:type_name -> management.v1.AddProxySQLServiceParams.CustomLabelsEntry diff --git a/api/management/v1/rds.pb.go b/api/management/v1/rds.pb.go index d338efd3738..fb882ea8de5 100644 --- a/api/management/v1/rds.pb.go +++ b/api/management/v1/rds.pb.go @@ -854,7 +854,6 @@ var ( (*v1.QANPostgreSQLPgStatementsAgent)(nil), // 16: inventory.v1.QANPostgreSQLPgStatementsAgent } ) - var file_management_v1_rds_proto_depIdxs = []int32{ 0, // 0: management.v1.DiscoverRDSInstance.engine:type_name -> management.v1.DiscoverRDSEngine 1, // 1: management.v1.DiscoverRDSResponse.rds_instances:type_name -> management.v1.DiscoverRDSInstance diff --git a/api/management/v1/service.pb.go b/api/management/v1/service.pb.go index cbad04b7f53..6ea52fbc973 100644 --- a/api/management/v1/service.pb.go +++ b/api/management/v1/service.pb.go @@ -1005,7 +1005,6 @@ var ( (*AddAzureDatabaseResponse)(nil), // 47: management.v1.AddAzureDatabaseResponse } ) - var file_management_v1_service_proto_depIdxs = []int32{ 9, // 0: management.v1.AddServiceRequest.mysql:type_name -> management.v1.AddMySQLServiceParams 10, // 1: management.v1.AddServiceRequest.mongodb:type_name -> management.v1.AddMongoDBServiceParams diff --git a/api/management/v1/severity.pb.go b/api/management/v1/severity.pb.go index 6a14d366aa6..51c04a93a0e 100644 --- a/api/management/v1/severity.pb.go +++ b/api/management/v1/severity.pb.go @@ -125,7 +125,6 @@ var ( Severity(0), // 0: management.v1.Severity } ) - var file_management_v1_severity_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/management/v1/valkey.pb.go b/api/management/v1/valkey.pb.go index a0fc2f73fe2..26cc4db7f99 100644 --- a/api/management/v1/valkey.pb.go +++ b/api/management/v1/valkey.pb.go @@ -417,7 +417,6 @@ var ( (*v1.ValkeyExporter)(nil), // 8: inventory.v1.ValkeyExporter } ) - var file_management_v1_valkey_proto_depIdxs = []int32{ 3, // 0: management.v1.AddValkeyServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddValkeyServiceParams.custom_labels:type_name -> management.v1.AddValkeyServiceParams.CustomLabelsEntry diff --git a/api/qan/v1/collector.pb.go b/api/qan/v1/collector.pb.go index b680bbd8f77..3716a3a24d1 100644 --- a/api/qan/v1/collector.pb.go +++ b/api/qan/v1/collector.pb.go @@ -2757,7 +2757,6 @@ var ( ExampleType(0), // 7: qan.v1.ExampleType } ) - var file_qan_v1_collector_proto_depIdxs = []int32{ 1, // 0: qan.v1.CollectRequest.metrics_bucket:type_name -> qan.v1.MetricsBucket 6, // 1: qan.v1.MetricsBucket.agent_type:type_name -> inventory.v1.AgentType diff --git a/api/qan/v1/filters.pb.go b/api/qan/v1/filters.pb.go index fcbf5e7aead..390a687dbc4 100644 --- a/api/qan/v1/filters.pb.go +++ b/api/qan/v1/filters.pb.go @@ -293,7 +293,6 @@ var ( (*MapFieldEntry)(nil), // 6: qan.v1.MapFieldEntry } ) - var file_qan_v1_filters_proto_depIdxs = []int32{ 5, // 0: qan.v1.GetFilteredMetricsNamesRequest.period_start_from:type_name -> google.protobuf.Timestamp 5, // 1: qan.v1.GetFilteredMetricsNamesRequest.period_start_to:type_name -> google.protobuf.Timestamp diff --git a/api/qan/v1/object_details.pb.go b/api/qan/v1/object_details.pb.go index f004bc0ec60..53e6c06150b 100644 --- a/api/qan/v1/object_details.pb.go +++ b/api/qan/v1/object_details.pb.go @@ -1645,7 +1645,6 @@ var ( ExampleType(0), // 29: qan.v1.ExampleType } ) - var file_qan_v1_object_details_proto_depIdxs = []int32{ 26, // 0: qan.v1.GetMetricsRequest.period_start_from:type_name -> google.protobuf.Timestamp 26, // 1: qan.v1.GetMetricsRequest.period_start_to:type_name -> google.protobuf.Timestamp diff --git a/api/qan/v1/profile.pb.go b/api/qan/v1/profile.pb.go index 03ab97e871a..7700b76dcd3 100644 --- a/api/qan/v1/profile.pb.go +++ b/api/qan/v1/profile.pb.go @@ -598,7 +598,6 @@ var ( (*Point)(nil), // 8: qan.v1.Point } ) - var file_qan_v1_profile_proto_depIdxs = []int32{ 7, // 0: qan.v1.GetReportRequest.period_start_from:type_name -> google.protobuf.Timestamp 7, // 1: qan.v1.GetReportRequest.period_start_to:type_name -> google.protobuf.Timestamp diff --git a/api/qan/v1/qan.pb.go b/api/qan/v1/qan.pb.go index c1d3bc6bb2e..2d37431a7c0 100644 --- a/api/qan/v1/qan.pb.go +++ b/api/qan/v1/qan.pb.go @@ -1000,7 +1000,6 @@ var ( (*MapFieldEntry)(nil), // 2: qan.v1.MapFieldEntry } ) - var file_qan_v1_qan_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/qan/v1/service.pb.go b/api/qan/v1/service.pb.go index 0e52423aa51..c5c688d9000 100644 --- a/api/qan/v1/service.pb.go +++ b/api/qan/v1/service.pb.go @@ -258,7 +258,6 @@ var ( (*GetQueryExampleResponse)(nil), // 24: qan.v1.GetQueryExampleResponse } ) - var file_qan_v1_service_proto_depIdxs = []int32{ 4, // 0: qan.v1.GetMetricsNamesResponse.data:type_name -> qan.v1.GetMetricsNamesResponse.DataEntry 5, // 1: qan.v1.QANService.GetReport:input_type -> qan.v1.GetReportRequest diff --git a/api/realtimeanalytics/v1/collector.pb.go b/api/realtimeanalytics/v1/collector.pb.go index f149de0a6cf..b9b81466e7c 100644 --- a/api/realtimeanalytics/v1/collector.pb.go +++ b/api/realtimeanalytics/v1/collector.pb.go @@ -140,7 +140,6 @@ var ( (*QueryData)(nil), // 2: realtimeanalytics.v1.QueryData } ) - var file_realtimeanalytics_v1_collector_proto_depIdxs = []int32{ 2, // 0: realtimeanalytics.v1.CollectRequest.queries:type_name -> realtimeanalytics.v1.QueryData 0, // 1: realtimeanalytics.v1.CollectorService.Collect:input_type -> realtimeanalytics.v1.CollectRequest diff --git a/api/realtimeanalytics/v1/query.pb.go b/api/realtimeanalytics/v1/query.pb.go index 43c4a1bdd5c..b9ab1809d9a 100644 --- a/api/realtimeanalytics/v1/query.pb.go +++ b/api/realtimeanalytics/v1/query.pb.go @@ -331,7 +331,6 @@ var ( (*durationpb.Duration)(nil), // 3: google.protobuf.Duration } ) - var file_realtimeanalytics_v1_query_proto_depIdxs = []int32{ 2, // 0: realtimeanalytics.v1.QueryMongoDBData.operation_start_time:type_name -> google.protobuf.Timestamp 3, // 1: realtimeanalytics.v1.QueryData.query_execution_duration:type_name -> google.protobuf.Duration diff --git a/api/realtimeanalytics/v1/realtimeanalytics.pb.go b/api/realtimeanalytics/v1/realtimeanalytics.pb.go index 8dbdbf8ccff..bd339f4bad9 100644 --- a/api/realtimeanalytics/v1/realtimeanalytics.pb.go +++ b/api/realtimeanalytics/v1/realtimeanalytics.pb.go @@ -718,7 +718,6 @@ var ( (*QueryData)(nil), // 16: realtimeanalytics.v1.QueryData } ) - var file_realtimeanalytics_v1_realtimeanalytics_proto_depIdxs = []int32{ 12, // 0: realtimeanalytics.v1.ListServicesRequest.service_type:type_name -> inventory.v1.ServiceType 13, // 1: realtimeanalytics.v1.ListServicesResponse.mongodb:type_name -> inventory.v1.MongoDBService diff --git a/api/server/v1/httperror.pb.go b/api/server/v1/httperror.pb.go index 8778ad26272..ef269ba2292 100644 --- a/api/server/v1/httperror.pb.go +++ b/api/server/v1/httperror.pb.go @@ -127,7 +127,6 @@ var ( (*anypb.Any)(nil), // 1: google.protobuf.Any } ) - var file_server_v1_httperror_proto_depIdxs = []int32{ 1, // 0: server.v1.HttpError.details:type_name -> google.protobuf.Any 1, // [1:1] is the sub-list for method output_type diff --git a/api/server/v1/json/client/server_service/change_settings_responses.go b/api/server/v1/json/client/server_service/change_settings_responses.go index 891ab2c1b91..58e6499e6e2 100644 --- a/api/server/v1/json/client/server_service/change_settings_responses.go +++ b/api/server/v1/json/client/server_service/change_settings_responses.go @@ -226,7 +226,7 @@ type ChangeSettingsBody struct { UpdateSnoozeDuration string `json:"update_snooze_duration,omitempty"` // A number of full days for log and trace data retention in ClickHouse. Should have a suffix in JSON: 2592000s, 43200m, 720h. - LogsRetention string `json:"logs_retention,omitempty"` + LogRetention string `json:"log_retention,omitempty"` // advisor run intervals AdvisorRunIntervals *ChangeSettingsParamsBodyAdvisorRunIntervals `json:"advisor_run_intervals,omitempty"` @@ -993,7 +993,7 @@ type ChangeSettingsOKBodySettings struct { UpdateSnoozeDuration string `json:"update_snooze_duration,omitempty"` // A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces). - LogsRetention string `json:"logs_retention,omitempty"` + LogRetention string `json:"log_retention,omitempty"` // advisor run intervals AdvisorRunIntervals *ChangeSettingsOKBodySettingsAdvisorRunIntervals `json:"advisor_run_intervals,omitempty"` diff --git a/api/server/v1/json/client/server_service/get_settings_responses.go b/api/server/v1/json/client/server_service/get_settings_responses.go index f09340c9928..6917c2dae14 100644 --- a/api/server/v1/json/client/server_service/get_settings_responses.go +++ b/api/server/v1/json/client/server_service/get_settings_responses.go @@ -736,7 +736,7 @@ type GetSettingsOKBodySettings struct { UpdateSnoozeDuration string `json:"update_snooze_duration,omitempty"` // A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces). - LogsRetention string `json:"logs_retention,omitempty"` + LogRetention string `json:"log_retention,omitempty"` // advisor run intervals AdvisorRunIntervals *GetSettingsOKBodySettingsAdvisorRunIntervals `json:"advisor_run_intervals,omitempty"` diff --git a/api/server/v1/json/v1.json b/api/server/v1/json/v1.json index e8047bacac6..9dfc7ce417b 100644 --- a/api/server/v1/json/v1.json +++ b/api/server/v1/json/v1.json @@ -317,7 +317,7 @@ "title": "Duration for which an update is snoozed", "x-order": 18 }, - "logs_retention": { + "log_retention": { "description": "A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces).", "type": "string", "x-order": 19 @@ -504,7 +504,7 @@ "type": "string", "x-order": 14 }, - "logs_retention": { + "log_retention": { "description": "A number of full days for log and trace data retention in ClickHouse. Should have a suffix in JSON: 2592000s, 43200m, 720h.", "type": "string", "x-order": 15 @@ -655,7 +655,7 @@ "title": "Duration for which an update is snoozed", "x-order": 18 }, - "logs_retention": { + "log_retention": { "description": "A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces).", "type": "string", "x-order": 19 diff --git a/api/server/v1/server.pb.go b/api/server/v1/server.pb.go index 508283b564d..9725e62d1f6 100644 --- a/api/server/v1/server.pb.go +++ b/api/server/v1/server.pb.go @@ -1102,7 +1102,7 @@ type Settings struct { // Duration for which an update is snoozed UpdateSnoozeDuration *durationpb.Duration `protobuf:"bytes,20,opt,name=update_snooze_duration,json=updateSnoozeDuration,proto3" json:"update_snooze_duration,omitempty"` // A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces). - LogsRetention *durationpb.Duration `protobuf:"bytes,21,opt,name=logs_retention,json=logsRetention,proto3" json:"logs_retention,omitempty"` + LogRetention *durationpb.Duration `protobuf:"bytes,21,opt,name=log_retention,json=logRetention,proto3" json:"log_retention,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1272,9 +1272,9 @@ func (x *Settings) GetUpdateSnoozeDuration() *durationpb.Duration { return nil } -func (x *Settings) GetLogsRetention() *durationpb.Duration { +func (x *Settings) GetLogRetention() *durationpb.Duration { if x != nil { - return x.LogsRetention + return x.LogRetention } return nil } @@ -1576,7 +1576,7 @@ type ChangeSettingsRequest struct { // A number of full days for which an update is snoozed, i.e. a multiple of 24h: 2592000s, 43200m, 720h. UpdateSnoozeDuration *durationpb.Duration `protobuf:"bytes,15,opt,name=update_snooze_duration,json=updateSnoozeDuration,proto3" json:"update_snooze_duration,omitempty"` // A number of full days for log and trace data retention in ClickHouse. Should have a suffix in JSON: 2592000s, 43200m, 720h. - LogsRetention *durationpb.Duration `protobuf:"bytes,16,opt,name=logs_retention,json=logsRetention,proto3" json:"logs_retention,omitempty"` + LogRetention *durationpb.Duration `protobuf:"bytes,16,opt,name=log_retention,json=logRetention,proto3" json:"log_retention,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1716,9 +1716,9 @@ func (x *ChangeSettingsRequest) GetUpdateSnoozeDuration() *durationpb.Duration { return nil } -func (x *ChangeSettingsRequest) GetLogsRetention() *durationpb.Duration { +func (x *ChangeSettingsRequest) GetLogRetention() *durationpb.Duration { if x != nil { - return x.LogsRetention + return x.LogRetention } return nil } @@ -1832,7 +1832,7 @@ const file_server_v1_server_proto_rawDesc = "" + "\x13AdvisorRunIntervals\x12F\n" + "\x11standard_interval\x18\x01 \x01(\v2\x19.google.protobuf.DurationR\x10standardInterval\x12>\n" + "\rrare_interval\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\frareInterval\x12F\n" + - "\x11frequent_interval\x18\x03 \x01(\v2\x19.google.protobuf.DurationR\x10frequentInterval\"\xb1\b\n" + + "\x11frequent_interval\x18\x03 \x01(\v2\x19.google.protobuf.DurationR\x10frequentInterval\"\xaf\b\n" + "\bSettings\x12'\n" + "\x0fupdates_enabled\x18\x01 \x01(\bR\x0eupdatesEnabled\x12+\n" + "\x11telemetry_enabled\x18\x02 \x01(\bR\x10telemetryEnabled\x12N\n" + @@ -1853,8 +1853,8 @@ const file_server_v1_server_proto_rawDesc = "" + "\x15enable_access_control\x18\x11 \x01(\bR\x13enableAccessControl\x12&\n" + "\x0fdefault_role_id\x18\x12 \x01(\rR\rdefaultRoleId\x123\n" + "\x16enable_internal_pg_qan\x18\x13 \x01(\bR\x13enableInternalPgQan\x12O\n" + - "\x16update_snooze_duration\x18\x14 \x01(\v2\x19.google.protobuf.DurationR\x14updateSnoozeDuration\x12@\n" + - "\x0elogs_retention\x18\x15 \x01(\v2\x19.google.protobuf.DurationR\rlogsRetention\"\x8f\x03\n" + + "\x16update_snooze_duration\x18\x14 \x01(\v2\x19.google.protobuf.DurationR\x14updateSnoozeDuration\x12>\n" + + "\rlog_retention\x18\x15 \x01(\v2\x19.google.protobuf.DurationR\flogRetention\"\x8f\x03\n" + "\x10ReadOnlySettings\x12'\n" + "\x0fupdates_enabled\x18\x01 \x01(\bR\x0eupdatesEnabled\x12+\n" + "\x11telemetry_enabled\x18\x02 \x01(\bR\x10telemetryEnabled\x12'\n" + @@ -1869,7 +1869,7 @@ const file_server_v1_server_proto_rawDesc = "" + "\x13GetSettingsResponse\x12/\n" + "\bsettings\x18\x01 \x01(\v2\x13.server.v1.SettingsR\bsettings\"V\n" + "\x1bGetReadOnlySettingsResponse\x127\n" + - "\bsettings\x18\x01 \x01(\v2\x1b.server.v1.ReadOnlySettingsR\bsettings\"\xb2\t\n" + + "\bsettings\x18\x01 \x01(\v2\x1b.server.v1.ReadOnlySettingsR\bsettings\"\xb0\t\n" + "\x15ChangeSettingsRequest\x12*\n" + "\x0eenable_updates\x18\x01 \x01(\bH\x00R\renableUpdates\x88\x01\x01\x12.\n" + "\x10enable_telemetry\x18\x02 \x01(\bH\x01R\x0fenableTelemetry\x88\x01\x01\x12N\n" + @@ -1887,8 +1887,8 @@ const file_server_v1_server_proto_rawDesc = "" + "\x15enable_access_control\x18\r \x01(\bH\tR\x13enableAccessControl\x88\x01\x01\x128\n" + "\x16enable_internal_pg_qan\x18\x0e \x01(\bH\n" + "R\x13enableInternalPgQan\x88\x01\x01\x12O\n" + - "\x16update_snooze_duration\x18\x0f \x01(\v2\x19.google.protobuf.DurationR\x14updateSnoozeDuration\x12@\n" + - "\x0elogs_retention\x18\x10 \x01(\v2\x19.google.protobuf.DurationR\rlogsRetentionB\x11\n" + + "\x16update_snooze_duration\x18\x0f \x01(\v2\x19.google.protobuf.DurationR\x14updateSnoozeDuration\x12>\n" + + "\rlog_retention\x18\x10 \x01(\v2\x19.google.protobuf.DurationR\flogRetentionB\x11\n" + "\x0f_enable_updatesB\x13\n" + "\x11_enable_telemetryB\n" + "\n" + @@ -1972,7 +1972,6 @@ var ( (*common.StringArray)(nil), // 29: common.StringArray } ) - var file_server_v1_server_proto_depIdxs = []int32{ 27, // 0: server.v1.VersionInfo.timestamp:type_name -> google.protobuf.Timestamp 1, // 1: server.v1.VersionResponse.server:type_name -> server.v1.VersionInfo @@ -1994,7 +1993,7 @@ var file_server_v1_server_proto_depIdxs = []int32{ 28, // 17: server.v1.Settings.data_retention:type_name -> google.protobuf.Duration 18, // 18: server.v1.Settings.advisor_run_intervals:type_name -> server.v1.AdvisorRunIntervals 28, // 19: server.v1.Settings.update_snooze_duration:type_name -> google.protobuf.Duration - 28, // 20: server.v1.Settings.logs_retention:type_name -> google.protobuf.Duration + 28, // 20: server.v1.Settings.log_retention:type_name -> google.protobuf.Duration 19, // 21: server.v1.GetSettingsResponse.settings:type_name -> server.v1.Settings 20, // 22: server.v1.GetReadOnlySettingsResponse.settings:type_name -> server.v1.ReadOnlySettings 17, // 23: server.v1.ChangeSettingsRequest.metrics_resolutions:type_name -> server.v1.MetricsResolutions @@ -2002,7 +2001,7 @@ var file_server_v1_server_proto_depIdxs = []int32{ 29, // 25: server.v1.ChangeSettingsRequest.aws_partitions:type_name -> common.StringArray 18, // 26: server.v1.ChangeSettingsRequest.advisor_run_intervals:type_name -> server.v1.AdvisorRunIntervals 28, // 27: server.v1.ChangeSettingsRequest.update_snooze_duration:type_name -> google.protobuf.Duration - 28, // 28: server.v1.ChangeSettingsRequest.logs_retention:type_name -> google.protobuf.Duration + 28, // 28: server.v1.ChangeSettingsRequest.log_retention:type_name -> google.protobuf.Duration 19, // 29: server.v1.ChangeSettingsResponse.settings:type_name -> server.v1.Settings 2, // 30: server.v1.ServerService.Version:input_type -> server.v1.VersionRequest 4, // 31: server.v1.ServerService.Readiness:input_type -> server.v1.ReadinessRequest diff --git a/api/server/v1/server.pb.validate.go b/api/server/v1/server.pb.validate.go index 314c1928272..da29ec5f6b7 100644 --- a/api/server/v1/server.pb.validate.go +++ b/api/server/v1/server.pb.validate.go @@ -2525,11 +2525,11 @@ func (m *Settings) validate(all bool) error { } if all { - switch v := interface{}(m.GetLogsRetention()).(type) { + switch v := interface{}(m.GetLogRetention()).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { errors = append(errors, SettingsValidationError{ - field: "LogsRetention", + field: "LogRetention", reason: "embedded message failed validation", cause: err, }) @@ -2537,16 +2537,16 @@ func (m *Settings) validate(all bool) error { case interface{ Validate() error }: if err := v.Validate(); err != nil { errors = append(errors, SettingsValidationError{ - field: "LogsRetention", + field: "LogRetention", reason: "embedded message failed validation", cause: err, }) } } - } else if v, ok := interface{}(m.GetLogsRetention()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetLogRetention()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return SettingsValidationError{ - field: "LogsRetention", + field: "LogRetention", reason: "embedded message failed validation", cause: err, } @@ -3358,11 +3358,11 @@ func (m *ChangeSettingsRequest) validate(all bool) error { } if all { - switch v := interface{}(m.GetLogsRetention()).(type) { + switch v := interface{}(m.GetLogRetention()).(type) { case interface{ ValidateAll() error }: if err := v.ValidateAll(); err != nil { errors = append(errors, ChangeSettingsRequestValidationError{ - field: "LogsRetention", + field: "LogRetention", reason: "embedded message failed validation", cause: err, }) @@ -3370,16 +3370,16 @@ func (m *ChangeSettingsRequest) validate(all bool) error { case interface{ Validate() error }: if err := v.Validate(); err != nil { errors = append(errors, ChangeSettingsRequestValidationError{ - field: "LogsRetention", + field: "LogRetention", reason: "embedded message failed validation", cause: err, }) } } - } else if v, ok := interface{}(m.GetLogsRetention()).(interface{ Validate() error }); ok { + } else if v, ok := interface{}(m.GetLogRetention()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ChangeSettingsRequestValidationError{ - field: "LogsRetention", + field: "LogRetention", reason: "embedded message failed validation", cause: err, } diff --git a/api/server/v1/server.proto b/api/server/v1/server.proto index cd9d4a8df18..a3fbc64b71a 100644 --- a/api/server/v1/server.proto +++ b/api/server/v1/server.proto @@ -184,7 +184,7 @@ message Settings { // Duration for which an update is snoozed google.protobuf.Duration update_snooze_duration = 20; // A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces). - google.protobuf.Duration logs_retention = 21; + google.protobuf.Duration log_retention = 21; } // ReadOnlySettings represents a stripped-down version of PMM Server settings that can be accessed by users of all roles. @@ -246,7 +246,7 @@ message ChangeSettingsRequest { // A number of full days for which an update is snoozed, i.e. a multiple of 24h: 2592000s, 43200m, 720h. google.protobuf.Duration update_snooze_duration = 15; // A number of full days for log and trace data retention in ClickHouse. Should have a suffix in JSON: 2592000s, 43200m, 720h. - google.protobuf.Duration logs_retention = 16; + google.protobuf.Duration log_retention = 16; } message ChangeSettingsResponse { diff --git a/api/swagger/swagger-dev.json b/api/swagger/swagger-dev.json index 4ab87f0e675..9a8bb6aaadc 100644 --- a/api/swagger/swagger-dev.json +++ b/api/swagger/swagger-dev.json @@ -32469,7 +32469,7 @@ "title": "Duration for which an update is snoozed", "x-order": 18 }, - "logs_retention": { + "log_retention": { "description": "A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces).", "type": "string", "x-order": 19 @@ -32656,7 +32656,7 @@ "type": "string", "x-order": 14 }, - "logs_retention": { + "log_retention": { "description": "A number of full days for log and trace data retention in ClickHouse. Should have a suffix in JSON: 2592000s, 43200m, 720h.", "type": "string", "x-order": 15 @@ -32807,7 +32807,7 @@ "title": "Duration for which an update is snoozed", "x-order": 18 }, - "logs_retention": { + "log_retention": { "description": "A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces).", "type": "string", "x-order": 19 diff --git a/api/swagger/swagger.json b/api/swagger/swagger.json index a240741c50a..007acec68b2 100644 --- a/api/swagger/swagger.json +++ b/api/swagger/swagger.json @@ -31496,7 +31496,7 @@ "title": "Duration for which an update is snoozed", "x-order": 18 }, - "logs_retention": { + "log_retention": { "description": "A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces).", "type": "string", "x-order": 19 @@ -31683,7 +31683,7 @@ "type": "string", "x-order": 14 }, - "logs_retention": { + "log_retention": { "description": "A number of full days for log and trace data retention in ClickHouse. Should have a suffix in JSON: 2592000s, 43200m, 720h.", "type": "string", "x-order": 15 @@ -31834,7 +31834,7 @@ "title": "Duration for which an update is snoozed", "x-order": 18 }, - "logs_retention": { + "log_retention": { "description": "A number of full days for log and trace data retention in ClickHouse (pmm.logs / pmm.traces).", "type": "string", "x-order": 19 diff --git a/api/uievents/v1/server.pb.go b/api/uievents/v1/server.pb.go index 41d144b9c29..dc995a6e8e5 100644 --- a/api/uievents/v1/server.pb.go +++ b/api/uievents/v1/server.pb.go @@ -480,7 +480,6 @@ var ( nil, // 6: uievents.v1.UserFlowEvent.ParamsEntry } ) - var file_uievents_v1_server_proto_depIdxs = []int32{ 6, // 0: uievents.v1.UserFlowEvent.params:type_name -> uievents.v1.UserFlowEvent.ParamsEntry 0, // 1: uievents.v1.StoreRequest.notifications:type_name -> uievents.v1.NotificationEvent diff --git a/api/user/v1/user.pb.go b/api/user/v1/user.pb.go index 12a954ca3f4..200364a0741 100644 --- a/api/user/v1/user.pb.go +++ b/api/user/v1/user.pb.go @@ -507,7 +507,6 @@ var ( (*timestamppb.Timestamp)(nil), // 7: google.protobuf.Timestamp } ) - var file_user_v1_user_proto_depIdxs = []int32{ 7, // 0: user.v1.GetUserResponse.snoozed_at:type_name -> google.protobuf.Timestamp 7, // 1: user.v1.UpdateUserResponse.snoozed_at:type_name -> google.protobuf.Timestamp diff --git a/managed/cmd/pmm-managed/main.go b/managed/cmd/pmm-managed/main.go index 098122eafef..97b1b6898e8 100644 --- a/managed/cmd/pmm-managed/main.go +++ b/managed/cmd/pmm-managed/main.go @@ -1019,7 +1019,7 @@ func main() { //nolint:gocognit,maintidx,cyclop l.Errorf("Could not load settings for initial logs retention TTL: %s", err) return } - if err := logsClickhouse.ApplyTTL(ctx, settings.LogsRetention); err != nil { + if err := logsClickhouse.ApplyTTL(ctx, settings.LogRetention); err != nil { l.Errorf("Could not apply initial logs retention TTL: %s", err) } }() diff --git a/managed/models/settings.go b/managed/models/settings.go index 1b8c1820227..ef1ede0eb6b 100644 --- a/managed/models/settings.go +++ b/managed/models/settings.go @@ -77,9 +77,9 @@ type Settings struct { DataRetention time.Duration `json:"data_retention"` - // LogsRetention is the duration to keep log and trace data in ClickHouse (pmm.logs / pmm.traces). + // LogRetention is the duration to keep log and trace data in ClickHouse (pmm.logs / pmm.traces). // It is independent of DataRetention, which governs metrics/QAN. - LogsRetention time.Duration `json:"logs_retention"` + LogRetention time.Duration `json:"log_retention"` AWSPartitions []string `json:"aws_partitions"` @@ -221,8 +221,8 @@ func (s *Settings) fillDefaults() { s.DataRetention = 30 * 24 * time.Hour //nolint:mnd } - if s.LogsRetention == 0 { - s.LogsRetention = 30 * 24 * time.Hour //nolint:mnd + if s.LogRetention == 0 { + s.LogRetention = 7 * 24 * time.Hour //nolint:mnd } if len(s.AWSPartitions) == 0 { diff --git a/managed/models/settings_helpers.go b/managed/models/settings_helpers.go index 4475c6dd462..1175514e2ff 100644 --- a/managed/models/settings_helpers.go +++ b/managed/models/settings_helpers.go @@ -58,7 +58,7 @@ type ChangeSettingsParams struct { DataRetention time.Duration - LogsRetention time.Duration + LogRetention time.Duration // List of AWS partitions to use. If empty - default partitions will be used. If nil - no changes will be made. AWSPartitions []string @@ -171,8 +171,8 @@ func UpdateSettings(q reform.DBTX, params *ChangeSettingsParams) (*Settings, err if params.DataRetention != 0 { settings.DataRetention = params.DataRetention } - if params.LogsRetention != 0 { - settings.LogsRetention = params.LogsRetention + if params.LogRetention != 0 { + settings.LogRetention = params.LogRetention } if params.AWSPartitions != nil { @@ -325,15 +325,15 @@ func ValidateSettings(params *ChangeSettingsParams) error { } } - if params.LogsRetention != 0 { - if _, err := validators.ValidateDataRetention(params.LogsRetention); err != nil { + if params.LogRetention != 0 { + if _, err := validators.ValidateDataRetention(params.LogRetention); err != nil { switch err.(type) { //nolint:errorlint case validators.DurationNotAllowedError: - return errors.New("logs_retention: should be a natural number of days") + return errors.New("log_retention: should be a natural number of days") case validators.MinDurationError: - return errors.New("logs_retention: minimal resolution is 24h") + return errors.New("log_retention: minimal resolution is 24h") default: - return errors.New("logs_retention: unknown error") + return errors.New("log_retention: unknown error") } } } diff --git a/managed/models/settings_helpers_test.go b/managed/models/settings_helpers_test.go index 965e85e4cee..5bae77e28cc 100644 --- a/managed/models/settings_helpers_test.go +++ b/managed/models/settings_helpers_test.go @@ -44,7 +44,7 @@ func TestSettings(t *testing.T) { LR: time.Minute, }, DataRetention: 30 * 24 * time.Hour, - LogsRetention: 30 * 24 * time.Hour, + LogRetention: 7 * 24 * time.Hour, AWSPartitions: []string{"aws"}, SaaS: models.Advisors{ AdvisorRunIntervals: models.AdvisorsRunIntervals{ @@ -71,7 +71,7 @@ func TestSettings(t *testing.T) { LR: time.Minute, }, DataRetention: 30 * 24 * time.Hour, - LogsRetention: 30 * 24 * time.Hour, + LogRetention: 7 * 24 * time.Hour, AWSPartitions: []string{"aws"}, SaaS: models.Advisors{ AdvisorRunIntervals: models.AdvisorsRunIntervals{ diff --git a/managed/services/server/server.go b/managed/services/server/server.go index b3ad8931d1d..178ccbcc5ac 100644 --- a/managed/services/server/server.go +++ b/managed/services/server/server.go @@ -491,7 +491,7 @@ func (s *Server) convertSettings(settings *models.Settings, disableInternalPgQan FrequentInterval: durationpb.New(settings.SaaS.AdvisorRunIntervals.FrequentInterval), }, DataRetention: durationpb.New(settings.DataRetention), - LogsRetention: durationpb.New(settings.LogsRetention), + LogRetention: durationpb.New(settings.LogRetention), SshKey: settings.SSHKey, AwsPartitions: settings.AWSPartitions, AdvisorEnabled: settings.IsAdvisorsEnabled(), @@ -665,7 +665,7 @@ func (s *Server) ChangeSettings(ctx context.Context, req *serverv1.ChangeSetting LR: metricsRes.GetLr().AsDuration(), }, DataRetention: req.DataRetention.AsDuration(), - LogsRetention: req.LogsRetention.AsDuration(), + LogRetention: req.LogRetention.AsDuration(), SSHKey: req.SshKey, } @@ -743,8 +743,8 @@ func (s *Server) ChangeSettings(ctx context.Context, req *serverv1.ChangeSetting } // Apply the log/trace retention TTL to ClickHouse when it changes (instant, no qan-api2 restart). - if s.logsClickhouse != nil && oldSettings.LogsRetention != newSettings.LogsRetention { - if err := s.logsClickhouse.ApplyTTL(ctx, newSettings.LogsRetention); err != nil { + if s.logsClickhouse != nil && oldSettings.LogRetention != newSettings.LogRetention { + if err := s.logsClickhouse.ApplyTTL(ctx, newSettings.LogRetention); err != nil { s.l.Errorf("Failed to apply logs retention TTL: %s", err) } } From cd41a570e89e735fd1148a37e86d1738152a10ac Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Thu, 4 Jun 2026 03:00:46 +0300 Subject: [PATCH 08/12] PMM-14689 Rename logsClickhouse to logService Rename the ClickHouse log/trace lifecycle dependency consistently: - interface logsClickhouseService -> logService - Server field / Params field / local var logsClickhouse / LogsClickhouse -> logService / LogService Co-Authored-By: Claude Opus 4.8 --- managed/cmd/pmm-managed/main.go | 8 ++++---- managed/services/server/deps.go | 4 ++-- managed/services/server/server.go | 10 +++++----- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/managed/cmd/pmm-managed/main.go b/managed/cmd/pmm-managed/main.go index 97b1b6898e8..c5552e5334d 100644 --- a/managed/cmd/pmm-managed/main.go +++ b/managed/cmd/pmm-managed/main.go @@ -1007,10 +1007,10 @@ func main() { //nolint:gocognit,maintidx,cyclop } // pmm-managed owns the lifecycle (schema + retention TTL) of the OpenTelemetry logs/traces tables. - logsClickhouse := clickhouse.New(clickhouseClient, *clickhouseAddrF, *clickHouseDatabaseF, *clickhouseUsernameF, *clickhousePasswordF) + logService := clickhouse.New(clickhouseClient, *clickhouseAddrF, *clickHouseDatabaseF, *clickhouseUsernameF, *clickhousePasswordF) go func() { // Migrations run independently of settings; only the initial TTL needs the retention setting. - if err := logsClickhouse.Bootstrap(ctx); err != nil { + if err := logService.Bootstrap(ctx); err != nil { l.Errorf("Could not bootstrap logs/traces schema: %s", err) return } @@ -1019,7 +1019,7 @@ func main() { //nolint:gocognit,maintidx,cyclop l.Errorf("Could not load settings for initial logs retention TTL: %s", err) return } - if err := logsClickhouse.ApplyTTL(ctx, settings.LogRetention); err != nil { + if err := logService.ApplyTTL(ctx, settings.LogRetention); err != nil { l.Errorf("Could not apply initial logs retention TTL: %s", err) } }() @@ -1067,7 +1067,7 @@ func main() { //nolint:gocognit,maintidx,cyclop HAService: haService, Nomad: nomad, QANClient: qanClient, - LogsClickhouse: logsClickhouse, + LogService: logService, } server, err := server.NewServer(serverParams) diff --git a/managed/services/server/deps.go b/managed/services/server/deps.go index d2bed5b74f5..844b531699f 100644 --- a/managed/services/server/deps.go +++ b/managed/services/server/deps.go @@ -118,7 +118,7 @@ type nomadService interface { UpdateConfiguration(settings *models.Settings) error } -// logsClickhouseService applies the log/trace retention TTL to the ClickHouse logs/traces tables. -type logsClickhouseService interface { +// logService applies the log/trace retention TTL to the ClickHouse logs/traces tables. +type logService interface { ApplyTTL(ctx context.Context, retention time.Duration) error } diff --git a/managed/services/server/server.go b/managed/services/server/server.go index 178ccbcc5ac..49caf514f81 100644 --- a/managed/services/server/server.go +++ b/managed/services/server/server.go @@ -65,7 +65,7 @@ type Server struct { haService haService updater *Updater nomad nomadService - logsClickhouse logsClickhouseService + logService logService l *logrus.Entry @@ -101,7 +101,7 @@ type Params struct { Dus *distribution.Service HAService haService Nomad nomadService - LogsClickhouse logsClickhouseService + LogService logService } // NewServer returns new server for Server service. @@ -127,7 +127,7 @@ func NewServer(params *Params) (*Server, error) { updater: params.Updater, haService: params.HAService, nomad: params.Nomad, - logsClickhouse: params.LogsClickhouse, + logService: params.LogService, l: logrus.WithField("component", "server"), pmmUpdateAuthFile: path, envSettings: &models.ChangeSettingsParams{}, @@ -743,8 +743,8 @@ func (s *Server) ChangeSettings(ctx context.Context, req *serverv1.ChangeSetting } // Apply the log/trace retention TTL to ClickHouse when it changes (instant, no qan-api2 restart). - if s.logsClickhouse != nil && oldSettings.LogRetention != newSettings.LogRetention { - if err := s.logsClickhouse.ApplyTTL(ctx, newSettings.LogRetention); err != nil { + if s.logService != nil && oldSettings.LogRetention != newSettings.LogRetention { + if err := s.logService.ApplyTTL(ctx, newSettings.LogRetention); err != nil { s.l.Errorf("Failed to apply logs retention TTL: %s", err) } } From 23b6f0566419dd7e30539f21378c937ffc4a6184 Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Thu, 4 Jun 2026 03:04:39 +0300 Subject: [PATCH 09/12] PMM-14689 Fix stale comment: pmm-managed enforces log retention, not qan-api2 After moving schema/TTL ownership to managed/services/clickhouse, the collector config comment still credited qan-api2 for enforcing retention. Correct it. Co-Authored-By: Claude Opus 4.8 --- managed/cmd/pmm-managed-init/main.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/managed/cmd/pmm-managed-init/main.go b/managed/cmd/pmm-managed-init/main.go index 10514e5c07a..2beb22cfbdc 100644 --- a/managed/cmd/pmm-managed-init/main.go +++ b/managed/cmd/pmm-managed-init/main.go @@ -68,7 +68,8 @@ func main() { } // Render the OpenTelemetry Collector config. Retention is enforced on the ClickHouse tables by - // qan-api2, not by the collector, so the collector config does not depend on any setting. + // pmm-managed (managed/services/clickhouse), not by the collector, so the collector config does + // not depend on any setting. if err := supervisord.SaveOtelcolConfig(); err != nil { logrus.Errorf("OpenTelemetry Collector configuration error: %s.", err) os.Exit(1) From 5a905317617c9d52634a7811f6f56faea17d393c Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Thu, 4 Jun 2026 03:15:44 +0300 Subject: [PATCH 10/12] PMM-14689 Run make format --- api/accesscontrol/v1beta1/accesscontrol.pb.go | 1 + api/actions/v1/actions.pb.go | 1 + api/advisors/v1/advisors.pb.go | 1 + api/agent/v1/agent.pb.go | 1 + api/agent/v1/collector.pb.go | 1 + api/agentlocal/v1/agentlocal.pb.go | 1 + api/alerting/v1/alerting.pb.go | 1 + api/alerting/v1/params.pb.go | 1 + api/backup/v1/artifacts.pb.go | 1 + api/backup/v1/backup.pb.go | 1 + api/backup/v1/common.pb.go | 1 + api/backup/v1/errors.pb.go | 1 + api/backup/v1/locations.pb.go | 1 + api/backup/v1/restores.pb.go | 1 + api/common/common.pb.go | 1 + api/common/metrics_resolutions.pb.go | 1 + api/dump/v1beta1/dump.pb.go | 1 + api/extensions/v1/redact.pb.go | 1 + api/ha/v1beta1/ha.pb.go | 1 + api/inventory/v1/agent_status.pb.go | 1 + api/inventory/v1/agents.pb.go | 1 + api/inventory/v1/log_level.pb.go | 1 + api/inventory/v1/nodes.pb.go | 1 + api/inventory/v1/services.pb.go | 1 + api/logship/v1/logship.pb.go | 1 + api/management/v1/agent.pb.go | 1 + api/management/v1/annotation.pb.go | 1 + api/management/v1/azure.pb.go | 1 + api/management/v1/external.pb.go | 1 + api/management/v1/haproxy.pb.go | 1 + api/management/v1/metrics.pb.go | 1 + api/management/v1/mongodb.pb.go | 1 + api/management/v1/mysql.pb.go | 1 + api/management/v1/node.pb.go | 1 + api/management/v1/postgresql.pb.go | 1 + api/management/v1/proxysql.pb.go | 1 + api/management/v1/rds.pb.go | 1 + api/management/v1/service.pb.go | 1 + api/management/v1/severity.pb.go | 1 + api/management/v1/valkey.pb.go | 1 + api/qan/v1/collector.pb.go | 1 + api/qan/v1/filters.pb.go | 1 + api/qan/v1/object_details.pb.go | 1 + api/qan/v1/profile.pb.go | 1 + api/qan/v1/qan.pb.go | 1 + api/qan/v1/service.pb.go | 1 + api/realtimeanalytics/v1/collector.pb.go | 1 + api/realtimeanalytics/v1/query.pb.go | 1 + api/realtimeanalytics/v1/realtimeanalytics.pb.go | 1 + api/server/v1/httperror.pb.go | 1 + api/server/v1/server.pb.go | 1 + api/uievents/v1/server.pb.go | 1 + api/user/v1/user.pb.go | 1 + managed/services/management/mysql.go | 5 +++-- 54 files changed, 56 insertions(+), 2 deletions(-) diff --git a/api/accesscontrol/v1beta1/accesscontrol.pb.go b/api/accesscontrol/v1beta1/accesscontrol.pb.go index ebec3bf05b7..f5e8ea4b004 100644 --- a/api/accesscontrol/v1beta1/accesscontrol.pb.go +++ b/api/accesscontrol/v1beta1/accesscontrol.pb.go @@ -844,6 +844,7 @@ var ( (*ListRolesResponse_RoleData)(nil), // 14: accesscontrol.v1beta1.ListRolesResponse.RoleData } ) + var file_accesscontrol_v1beta1_accesscontrol_proto_depIdxs = []int32{ 14, // 0: accesscontrol.v1beta1.ListRolesResponse.roles:type_name -> accesscontrol.v1beta1.ListRolesResponse.RoleData 0, // 1: accesscontrol.v1beta1.AccessControlService.CreateRole:input_type -> accesscontrol.v1beta1.CreateRoleRequest diff --git a/api/actions/v1/actions.pb.go b/api/actions/v1/actions.pb.go index 35461ae3739..f1cfdec8cfa 100644 --- a/api/actions/v1/actions.pb.go +++ b/api/actions/v1/actions.pb.go @@ -2649,6 +2649,7 @@ var ( (*StartServiceActionResponse)(nil), // 32: actions.v1.StartServiceActionResponse } ) + var file_actions_v1_actions_proto_depIdxs = []int32{ 3, // 0: actions.v1.StartServiceActionRequest.mysql_explain:type_name -> actions.v1.StartMySQLExplainActionParams 5, // 1: actions.v1.StartServiceActionRequest.mysql_explain_json:type_name -> actions.v1.StartMySQLExplainJSONActionParams diff --git a/api/advisors/v1/advisors.pb.go b/api/advisors/v1/advisors.pb.go index efbc083a3a9..3e4995415ad 100644 --- a/api/advisors/v1/advisors.pb.go +++ b/api/advisors/v1/advisors.pb.go @@ -1387,6 +1387,7 @@ var ( v1.Severity(0), // 22: management.v1.Severity } ) + var file_advisors_v1_advisors_proto_depIdxs = []int32{ 22, // 0: advisors.v1.AdvisorCheckResult.severity:type_name -> management.v1.Severity 20, // 1: advisors.v1.AdvisorCheckResult.labels:type_name -> advisors.v1.AdvisorCheckResult.LabelsEntry diff --git a/api/agent/v1/agent.pb.go b/api/agent/v1/agent.pb.go index 503643b1469..23241043050 100644 --- a/api/agent/v1/agent.pb.go +++ b/api/agent/v1/agent.pb.go @@ -7242,6 +7242,7 @@ var ( (*v11.Metadata)(nil), // 105: backup.v1.Metadata } ) + var file_agent_v1_agent_proto_depIdxs = []int32{ 44, // 0: agent.v1.TextFiles.files:type_name -> agent.v1.TextFiles.FilesEntry 94, // 1: agent.v1.Pong.current_time:type_name -> google.protobuf.Timestamp diff --git a/api/agent/v1/collector.pb.go b/api/agent/v1/collector.pb.go index da17db39c64..65633c05d17 100644 --- a/api/agent/v1/collector.pb.go +++ b/api/agent/v1/collector.pb.go @@ -2827,6 +2827,7 @@ var ( v1.AgentType(0), // 9: inventory.v1.AgentType } ) + var file_agent_v1_collector_proto_depIdxs = []int32{ 3, // 0: agent.v1.MetricsBucket.common:type_name -> agent.v1.MetricsBucket.Common 4, // 1: agent.v1.MetricsBucket.mysql:type_name -> agent.v1.MetricsBucket.MySQL diff --git a/api/agentlocal/v1/agentlocal.pb.go b/api/agentlocal/v1/agentlocal.pb.go index 12053d57921..7bb13a7cb58 100644 --- a/api/agentlocal/v1/agentlocal.pb.go +++ b/api/agentlocal/v1/agentlocal.pb.go @@ -485,6 +485,7 @@ var ( v1.AgentStatus(0), // 8: inventory.v1.AgentStatus } ) + var file_agentlocal_v1_agentlocal_proto_depIdxs = []int32{ 6, // 0: agentlocal.v1.ServerInfo.latency:type_name -> google.protobuf.Duration 6, // 1: agentlocal.v1.ServerInfo.clock_drift:type_name -> google.protobuf.Duration diff --git a/api/alerting/v1/alerting.pb.go b/api/alerting/v1/alerting.pb.go index bccb6659d24..3b2c47d73ec 100644 --- a/api/alerting/v1/alerting.pb.go +++ b/api/alerting/v1/alerting.pb.go @@ -1459,6 +1459,7 @@ var ( (*timestamppb.Timestamp)(nil), // 26: google.protobuf.Timestamp } ) + var file_alerting_v1_alerting_proto_depIdxs = []int32{ 22, // 0: alerting.v1.ParamDefinition.unit:type_name -> alerting.v1.ParamUnit 23, // 1: alerting.v1.ParamDefinition.type:type_name -> alerting.v1.ParamType diff --git a/api/alerting/v1/params.pb.go b/api/alerting/v1/params.pb.go index eb001a606db..69d88497102 100644 --- a/api/alerting/v1/params.pb.go +++ b/api/alerting/v1/params.pb.go @@ -163,6 +163,7 @@ var ( ParamType(0), // 1: alerting.v1.ParamType } ) + var file_alerting_v1_params_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/backup/v1/artifacts.pb.go b/api/backup/v1/artifacts.pb.go index e2352f61cd1..dde03ceefef 100644 --- a/api/backup/v1/artifacts.pb.go +++ b/api/backup/v1/artifacts.pb.go @@ -656,6 +656,7 @@ var ( (*Metadata)(nil), // 12: backup.v1.Metadata } ) + var file_backup_v1_artifacts_proto_depIdxs = []int32{ 9, // 0: backup.v1.Artifact.data_model:type_name -> backup.v1.DataModel 0, // 1: backup.v1.Artifact.status:type_name -> backup.v1.BackupStatus diff --git a/api/backup/v1/backup.pb.go b/api/backup/v1/backup.pb.go index 19241fc6afd..4d587217600 100644 --- a/api/backup/v1/backup.pb.go +++ b/api/backup/v1/backup.pb.go @@ -1276,6 +1276,7 @@ var ( (*ListPitrTimerangesResponse)(nil), // 27: backup.v1.ListPitrTimerangesResponse } ) + var file_backup_v1_backup_proto_depIdxs = []int32{ 15, // 0: backup.v1.StartBackupRequest.retry_interval:type_name -> google.protobuf.Duration 16, // 1: backup.v1.StartBackupRequest.data_model:type_name -> backup.v1.DataModel diff --git a/api/backup/v1/common.pb.go b/api/backup/v1/common.pb.go index f84ca11de32..c8274024e38 100644 --- a/api/backup/v1/common.pb.go +++ b/api/backup/v1/common.pb.go @@ -423,6 +423,7 @@ var ( (*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp } ) + var file_backup_v1_common_proto_depIdxs = []int32{ 2, // 0: backup.v1.Metadata.file_list:type_name -> backup.v1.File 6, // 1: backup.v1.Metadata.restore_to:type_name -> google.protobuf.Timestamp diff --git a/api/backup/v1/errors.pb.go b/api/backup/v1/errors.pb.go index 5709e5ac243..902adc277c1 100644 --- a/api/backup/v1/errors.pb.go +++ b/api/backup/v1/errors.pb.go @@ -169,6 +169,7 @@ var ( (*Error)(nil), // 1: backup.v1.Error } ) + var file_backup_v1_errors_proto_depIdxs = []int32{ 0, // 0: backup.v1.Error.code:type_name -> backup.v1.ErrorCode 1, // [1:1] is the sub-list for method output_type diff --git a/api/backup/v1/locations.pb.go b/api/backup/v1/locations.pb.go index 72c13dece43..396b552ee80 100644 --- a/api/backup/v1/locations.pb.go +++ b/api/backup/v1/locations.pb.go @@ -833,6 +833,7 @@ var ( (*TestLocationConfigResponse)(nil), // 12: backup.v1.TestLocationConfigResponse } ) + var file_backup_v1_locations_proto_depIdxs = []int32{ 0, // 0: backup.v1.Location.filesystem_config:type_name -> backup.v1.FilesystemLocationConfig 1, // 1: backup.v1.Location.s3_config:type_name -> backup.v1.S3LocationConfig diff --git a/api/backup/v1/restores.pb.go b/api/backup/v1/restores.pb.go index 580c158b119..ee12d6b9285 100644 --- a/api/backup/v1/restores.pb.go +++ b/api/backup/v1/restores.pb.go @@ -625,6 +625,7 @@ var ( (*LogChunk)(nil), // 10: backup.v1.LogChunk } ) + var file_backup_v1_restores_proto_depIdxs = []int32{ 8, // 0: backup.v1.RestoreHistoryItem.data_model:type_name -> backup.v1.DataModel 0, // 1: backup.v1.RestoreHistoryItem.status:type_name -> backup.v1.RestoreStatus diff --git a/api/common/common.pb.go b/api/common/common.pb.go index 2303ccd29ab..0d05883daa1 100644 --- a/api/common/common.pb.go +++ b/api/common/common.pb.go @@ -147,6 +147,7 @@ var ( nil, // 2: common.StringMap.ValuesEntry } ) + var file_common_common_proto_depIdxs = []int32{ 2, // 0: common.StringMap.values:type_name -> common.StringMap.ValuesEntry 1, // [1:1] is the sub-list for method output_type diff --git a/api/common/metrics_resolutions.pb.go b/api/common/metrics_resolutions.pb.go index 389e4572992..75e587ba9a5 100644 --- a/api/common/metrics_resolutions.pb.go +++ b/api/common/metrics_resolutions.pb.go @@ -118,6 +118,7 @@ var ( (*durationpb.Duration)(nil), // 1: google.protobuf.Duration } ) + var file_common_metrics_resolutions_proto_depIdxs = []int32{ 1, // 0: common.MetricsResolutions.hr:type_name -> google.protobuf.Duration 1, // 1: common.MetricsResolutions.mr:type_name -> google.protobuf.Duration diff --git a/api/dump/v1beta1/dump.pb.go b/api/dump/v1beta1/dump.pb.go index 76f0e473adf..d031bce6b8f 100644 --- a/api/dump/v1beta1/dump.pb.go +++ b/api/dump/v1beta1/dump.pb.go @@ -897,6 +897,7 @@ var ( (*timestamppb.Timestamp)(nil), // 14: google.protobuf.Timestamp } ) + var file_dump_v1beta1_dump_proto_depIdxs = []int32{ 0, // 0: dump.v1beta1.Dump.status:type_name -> dump.v1beta1.DumpStatus 14, // 1: dump.v1beta1.Dump.start_time:type_name -> google.protobuf.Timestamp diff --git a/api/extensions/v1/redact.pb.go b/api/extensions/v1/redact.pb.go index c850a90df3c..738ce213118 100644 --- a/api/extensions/v1/redact.pb.go +++ b/api/extensions/v1/redact.pb.go @@ -135,6 +135,7 @@ var ( (*descriptorpb.FieldOptions)(nil), // 1: google.protobuf.FieldOptions } ) + var file_extensions_v1_redact_proto_depIdxs = []int32{ 1, // 0: extensions.v1.sensitive:extendee -> google.protobuf.FieldOptions 0, // 1: extensions.v1.sensitive:type_name -> extensions.v1.RedactType diff --git a/api/ha/v1beta1/ha.pb.go b/api/ha/v1beta1/ha.pb.go index 655996ccdbc..f798cccbcc0 100644 --- a/api/ha/v1beta1/ha.pb.go +++ b/api/ha/v1beta1/ha.pb.go @@ -351,6 +351,7 @@ var ( (*StatusResponse)(nil), // 5: ha.v1beta1.StatusResponse } ) + var file_ha_v1beta1_ha_proto_depIdxs = []int32{ 0, // 0: ha.v1beta1.HANode.role:type_name -> ha.v1beta1.NodeRole 2, // 1: ha.v1beta1.ListNodesResponse.nodes:type_name -> ha.v1beta1.HANode diff --git a/api/inventory/v1/agent_status.pb.go b/api/inventory/v1/agent_status.pb.go index ace1432a5e8..1e23074d2fc 100644 --- a/api/inventory/v1/agent_status.pb.go +++ b/api/inventory/v1/agent_status.pb.go @@ -128,6 +128,7 @@ var ( AgentStatus(0), // 0: inventory.v1.AgentStatus } ) + var file_inventory_v1_agent_status_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/inventory/v1/agents.pb.go b/api/inventory/v1/agents.pb.go index 536b7c17157..3caffa5b810 100644 --- a/api/inventory/v1/agents.pb.go +++ b/api/inventory/v1/agents.pb.go @@ -12747,6 +12747,7 @@ var ( (*common.StringMap)(nil), // 115: common.StringMap } ) + var file_inventory_v1_agents_proto_depIdxs = []int32{ 70, // 0: inventory.v1.PMMAgent.custom_labels:type_name -> inventory.v1.PMMAgent.CustomLabelsEntry 111, // 1: inventory.v1.VMAgent.status:type_name -> inventory.v1.AgentStatus diff --git a/api/inventory/v1/log_level.pb.go b/api/inventory/v1/log_level.pb.go index 47f0373d578..ff4d79ca3f2 100644 --- a/api/inventory/v1/log_level.pb.go +++ b/api/inventory/v1/log_level.pb.go @@ -114,6 +114,7 @@ var ( LogLevel(0), // 0: inventory.v1.LogLevel } ) + var file_inventory_v1_log_level_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/inventory/v1/nodes.pb.go b/api/inventory/v1/nodes.pb.go index e0186c91815..447663477a9 100644 --- a/api/inventory/v1/nodes.pb.go +++ b/api/inventory/v1/nodes.pb.go @@ -2043,6 +2043,7 @@ var ( nil, // 28: inventory.v1.AddRemoteAzureNodeParams.CustomLabelsEntry } ) + var file_inventory_v1_nodes_proto_depIdxs = []int32{ 19, // 0: inventory.v1.GenericNode.custom_labels:type_name -> inventory.v1.GenericNode.CustomLabelsEntry 20, // 1: inventory.v1.ContainerNode.custom_labels:type_name -> inventory.v1.ContainerNode.CustomLabelsEntry diff --git a/api/inventory/v1/services.pb.go b/api/inventory/v1/services.pb.go index 23eeeb28b81..a8d1519b61f 100644 --- a/api/inventory/v1/services.pb.go +++ b/api/inventory/v1/services.pb.go @@ -3334,6 +3334,7 @@ var ( (*common.StringMap)(nil), // 43: common.StringMap } ) + var file_inventory_v1_services_proto_depIdxs = []int32{ 27, // 0: inventory.v1.MySQLService.custom_labels:type_name -> inventory.v1.MySQLService.CustomLabelsEntry 28, // 1: inventory.v1.MySQLService.extra_dsn_params:type_name -> inventory.v1.MySQLService.ExtraDsnParamsEntry diff --git a/api/logship/v1/logship.pb.go b/api/logship/v1/logship.pb.go index af4d886bde7..2a3a90f1c3e 100644 --- a/api/logship/v1/logship.pb.go +++ b/api/logship/v1/logship.pb.go @@ -253,6 +253,7 @@ var ( (*timestamppb.Timestamp)(nil), // 5: google.protobuf.Timestamp } ) + var file_logship_v1_logship_proto_depIdxs = []int32{ 5, // 0: logship.v1.LogRecord.time:type_name -> google.protobuf.Timestamp 3, // 1: logship.v1.LogRecord.attributes:type_name -> logship.v1.LogRecord.AttributesEntry diff --git a/api/management/v1/agent.pb.go b/api/management/v1/agent.pb.go index 8a745a48910..c76c750f869 100644 --- a/api/management/v1/agent.pb.go +++ b/api/management/v1/agent.pb.go @@ -1241,6 +1241,7 @@ var ( (*durationpb.Duration)(nil), // 17: google.protobuf.Duration } ) + var file_management_v1_agent_proto_depIdxs = []int32{ 8, // 0: management.v1.UniversalAgent.azure_options:type_name -> management.v1.UniversalAgent.AzureOptions 14, // 1: management.v1.UniversalAgent.created_at:type_name -> google.protobuf.Timestamp diff --git a/api/management/v1/annotation.pb.go b/api/management/v1/annotation.pb.go index 53bbe233c1b..ec781561e4c 100644 --- a/api/management/v1/annotation.pb.go +++ b/api/management/v1/annotation.pb.go @@ -164,6 +164,7 @@ var ( (*AddAnnotationResponse)(nil), // 1: management.v1.AddAnnotationResponse } ) + var file_management_v1_annotation_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/management/v1/azure.pb.go b/api/management/v1/azure.pb.go index 863cff6d5ab..04a05c47ec1 100644 --- a/api/management/v1/azure.pb.go +++ b/api/management/v1/azure.pb.go @@ -726,6 +726,7 @@ var ( (*durationpb.Duration)(nil), // 7: google.protobuf.Duration } ) + var file_management_v1_azure_proto_depIdxs = []int32{ 0, // 0: management.v1.DiscoverAzureDatabaseInstance.type:type_name -> management.v1.DiscoverAzureDatabaseType 2, // 1: management.v1.DiscoverAzureDatabaseResponse.azure_database_instance:type_name -> management.v1.DiscoverAzureDatabaseInstance diff --git a/api/management/v1/external.pb.go b/api/management/v1/external.pb.go index d990cb53abe..3632121e1c2 100644 --- a/api/management/v1/external.pb.go +++ b/api/management/v1/external.pb.go @@ -355,6 +355,7 @@ var ( (*v1.ExternalExporter)(nil), // 6: inventory.v1.ExternalExporter } ) + var file_management_v1_external_proto_depIdxs = []int32{ 3, // 0: management.v1.AddExternalServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddExternalServiceParams.custom_labels:type_name -> management.v1.AddExternalServiceParams.CustomLabelsEntry diff --git a/api/management/v1/haproxy.pb.go b/api/management/v1/haproxy.pb.go index 95cad534323..f3de5158762 100644 --- a/api/management/v1/haproxy.pb.go +++ b/api/management/v1/haproxy.pb.go @@ -333,6 +333,7 @@ var ( (*v1.ExternalExporter)(nil), // 6: inventory.v1.ExternalExporter } ) + var file_management_v1_haproxy_proto_depIdxs = []int32{ 3, // 0: management.v1.AddHAProxyServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddHAProxyServiceParams.custom_labels:type_name -> management.v1.AddHAProxyServiceParams.CustomLabelsEntry diff --git a/api/management/v1/metrics.pb.go b/api/management/v1/metrics.pb.go index b552c7955fb..748642db7cb 100644 --- a/api/management/v1/metrics.pb.go +++ b/api/management/v1/metrics.pb.go @@ -103,6 +103,7 @@ var ( MetricsMode(0), // 0: management.v1.MetricsMode } ) + var file_management_v1_metrics_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/management/v1/mongodb.pb.go b/api/management/v1/mongodb.pb.go index aad151306df..c25cc4f8282 100644 --- a/api/management/v1/mongodb.pb.go +++ b/api/management/v1/mongodb.pb.go @@ -559,6 +559,7 @@ var ( (*v1.RTAMongoDBAgent)(nil), // 11: inventory.v1.RTAMongoDBAgent } ) + var file_management_v1_mongodb_proto_depIdxs = []int32{ 3, // 0: management.v1.AddMongoDBServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddMongoDBServiceParams.custom_labels:type_name -> management.v1.AddMongoDBServiceParams.CustomLabelsEntry diff --git a/api/management/v1/mysql.pb.go b/api/management/v1/mysql.pb.go index 9cbe4962792..be69c07f41e 100644 --- a/api/management/v1/mysql.pb.go +++ b/api/management/v1/mysql.pb.go @@ -566,6 +566,7 @@ var ( (*v1.QANMySQLSlowlogAgent)(nil), // 11: inventory.v1.QANMySQLSlowlogAgent } ) + var file_management_v1_mysql_proto_depIdxs = []int32{ 4, // 0: management.v1.AddMySQLServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddMySQLServiceParams.custom_labels:type_name -> management.v1.AddMySQLServiceParams.CustomLabelsEntry diff --git a/api/management/v1/node.pb.go b/api/management/v1/node.pb.go index 53bb2be68db..149fb30ad94 100644 --- a/api/management/v1/node.pb.go +++ b/api/management/v1/node.pb.go @@ -1255,6 +1255,7 @@ var ( (*timestamppb.Timestamp)(nil), // 21: google.protobuf.Timestamp } ) + var file_management_v1_node_proto_depIdxs = []int32{ 16, // 0: management.v1.AddNodeParams.node_type:type_name -> inventory.v1.NodeType 11, // 1: management.v1.AddNodeParams.custom_labels:type_name -> management.v1.AddNodeParams.CustomLabelsEntry diff --git a/api/management/v1/postgresql.pb.go b/api/management/v1/postgresql.pb.go index 0e6f54ad033..0271ba48788 100644 --- a/api/management/v1/postgresql.pb.go +++ b/api/management/v1/postgresql.pb.go @@ -535,6 +535,7 @@ var ( (*v1.QANPostgreSQLPgStatMonitorAgent)(nil), // 10: inventory.v1.QANPostgreSQLPgStatMonitorAgent } ) + var file_management_v1_postgresql_proto_depIdxs = []int32{ 3, // 0: management.v1.AddPostgreSQLServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddPostgreSQLServiceParams.custom_labels:type_name -> management.v1.AddPostgreSQLServiceParams.CustomLabelsEntry diff --git a/api/management/v1/proxysql.pb.go b/api/management/v1/proxysql.pb.go index 7d9dbbcfc07..e3142ed85df 100644 --- a/api/management/v1/proxysql.pb.go +++ b/api/management/v1/proxysql.pb.go @@ -395,6 +395,7 @@ var ( (*v1.ProxySQLExporter)(nil), // 8: inventory.v1.ProxySQLExporter } ) + var file_management_v1_proxysql_proto_depIdxs = []int32{ 3, // 0: management.v1.AddProxySQLServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddProxySQLServiceParams.custom_labels:type_name -> management.v1.AddProxySQLServiceParams.CustomLabelsEntry diff --git a/api/management/v1/rds.pb.go b/api/management/v1/rds.pb.go index fb882ea8de5..d338efd3738 100644 --- a/api/management/v1/rds.pb.go +++ b/api/management/v1/rds.pb.go @@ -854,6 +854,7 @@ var ( (*v1.QANPostgreSQLPgStatementsAgent)(nil), // 16: inventory.v1.QANPostgreSQLPgStatementsAgent } ) + var file_management_v1_rds_proto_depIdxs = []int32{ 0, // 0: management.v1.DiscoverRDSInstance.engine:type_name -> management.v1.DiscoverRDSEngine 1, // 1: management.v1.DiscoverRDSResponse.rds_instances:type_name -> management.v1.DiscoverRDSInstance diff --git a/api/management/v1/service.pb.go b/api/management/v1/service.pb.go index 6ea52fbc973..cbad04b7f53 100644 --- a/api/management/v1/service.pb.go +++ b/api/management/v1/service.pb.go @@ -1005,6 +1005,7 @@ var ( (*AddAzureDatabaseResponse)(nil), // 47: management.v1.AddAzureDatabaseResponse } ) + var file_management_v1_service_proto_depIdxs = []int32{ 9, // 0: management.v1.AddServiceRequest.mysql:type_name -> management.v1.AddMySQLServiceParams 10, // 1: management.v1.AddServiceRequest.mongodb:type_name -> management.v1.AddMongoDBServiceParams diff --git a/api/management/v1/severity.pb.go b/api/management/v1/severity.pb.go index 51c04a93a0e..6a14d366aa6 100644 --- a/api/management/v1/severity.pb.go +++ b/api/management/v1/severity.pb.go @@ -125,6 +125,7 @@ var ( Severity(0), // 0: management.v1.Severity } ) + var file_management_v1_severity_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/management/v1/valkey.pb.go b/api/management/v1/valkey.pb.go index 26cc4db7f99..a0fc2f73fe2 100644 --- a/api/management/v1/valkey.pb.go +++ b/api/management/v1/valkey.pb.go @@ -417,6 +417,7 @@ var ( (*v1.ValkeyExporter)(nil), // 8: inventory.v1.ValkeyExporter } ) + var file_management_v1_valkey_proto_depIdxs = []int32{ 3, // 0: management.v1.AddValkeyServiceParams.add_node:type_name -> management.v1.AddNodeParams 2, // 1: management.v1.AddValkeyServiceParams.custom_labels:type_name -> management.v1.AddValkeyServiceParams.CustomLabelsEntry diff --git a/api/qan/v1/collector.pb.go b/api/qan/v1/collector.pb.go index 3716a3a24d1..b680bbd8f77 100644 --- a/api/qan/v1/collector.pb.go +++ b/api/qan/v1/collector.pb.go @@ -2757,6 +2757,7 @@ var ( ExampleType(0), // 7: qan.v1.ExampleType } ) + var file_qan_v1_collector_proto_depIdxs = []int32{ 1, // 0: qan.v1.CollectRequest.metrics_bucket:type_name -> qan.v1.MetricsBucket 6, // 1: qan.v1.MetricsBucket.agent_type:type_name -> inventory.v1.AgentType diff --git a/api/qan/v1/filters.pb.go b/api/qan/v1/filters.pb.go index 390a687dbc4..fcbf5e7aead 100644 --- a/api/qan/v1/filters.pb.go +++ b/api/qan/v1/filters.pb.go @@ -293,6 +293,7 @@ var ( (*MapFieldEntry)(nil), // 6: qan.v1.MapFieldEntry } ) + var file_qan_v1_filters_proto_depIdxs = []int32{ 5, // 0: qan.v1.GetFilteredMetricsNamesRequest.period_start_from:type_name -> google.protobuf.Timestamp 5, // 1: qan.v1.GetFilteredMetricsNamesRequest.period_start_to:type_name -> google.protobuf.Timestamp diff --git a/api/qan/v1/object_details.pb.go b/api/qan/v1/object_details.pb.go index 53e6c06150b..f004bc0ec60 100644 --- a/api/qan/v1/object_details.pb.go +++ b/api/qan/v1/object_details.pb.go @@ -1645,6 +1645,7 @@ var ( ExampleType(0), // 29: qan.v1.ExampleType } ) + var file_qan_v1_object_details_proto_depIdxs = []int32{ 26, // 0: qan.v1.GetMetricsRequest.period_start_from:type_name -> google.protobuf.Timestamp 26, // 1: qan.v1.GetMetricsRequest.period_start_to:type_name -> google.protobuf.Timestamp diff --git a/api/qan/v1/profile.pb.go b/api/qan/v1/profile.pb.go index 7700b76dcd3..03ab97e871a 100644 --- a/api/qan/v1/profile.pb.go +++ b/api/qan/v1/profile.pb.go @@ -598,6 +598,7 @@ var ( (*Point)(nil), // 8: qan.v1.Point } ) + var file_qan_v1_profile_proto_depIdxs = []int32{ 7, // 0: qan.v1.GetReportRequest.period_start_from:type_name -> google.protobuf.Timestamp 7, // 1: qan.v1.GetReportRequest.period_start_to:type_name -> google.protobuf.Timestamp diff --git a/api/qan/v1/qan.pb.go b/api/qan/v1/qan.pb.go index 2d37431a7c0..c1d3bc6bb2e 100644 --- a/api/qan/v1/qan.pb.go +++ b/api/qan/v1/qan.pb.go @@ -1000,6 +1000,7 @@ var ( (*MapFieldEntry)(nil), // 2: qan.v1.MapFieldEntry } ) + var file_qan_v1_qan_proto_depIdxs = []int32{ 0, // [0:0] is the sub-list for method output_type 0, // [0:0] is the sub-list for method input_type diff --git a/api/qan/v1/service.pb.go b/api/qan/v1/service.pb.go index c5c688d9000..0e52423aa51 100644 --- a/api/qan/v1/service.pb.go +++ b/api/qan/v1/service.pb.go @@ -258,6 +258,7 @@ var ( (*GetQueryExampleResponse)(nil), // 24: qan.v1.GetQueryExampleResponse } ) + var file_qan_v1_service_proto_depIdxs = []int32{ 4, // 0: qan.v1.GetMetricsNamesResponse.data:type_name -> qan.v1.GetMetricsNamesResponse.DataEntry 5, // 1: qan.v1.QANService.GetReport:input_type -> qan.v1.GetReportRequest diff --git a/api/realtimeanalytics/v1/collector.pb.go b/api/realtimeanalytics/v1/collector.pb.go index b9b81466e7c..f149de0a6cf 100644 --- a/api/realtimeanalytics/v1/collector.pb.go +++ b/api/realtimeanalytics/v1/collector.pb.go @@ -140,6 +140,7 @@ var ( (*QueryData)(nil), // 2: realtimeanalytics.v1.QueryData } ) + var file_realtimeanalytics_v1_collector_proto_depIdxs = []int32{ 2, // 0: realtimeanalytics.v1.CollectRequest.queries:type_name -> realtimeanalytics.v1.QueryData 0, // 1: realtimeanalytics.v1.CollectorService.Collect:input_type -> realtimeanalytics.v1.CollectRequest diff --git a/api/realtimeanalytics/v1/query.pb.go b/api/realtimeanalytics/v1/query.pb.go index b9ab1809d9a..43c4a1bdd5c 100644 --- a/api/realtimeanalytics/v1/query.pb.go +++ b/api/realtimeanalytics/v1/query.pb.go @@ -331,6 +331,7 @@ var ( (*durationpb.Duration)(nil), // 3: google.protobuf.Duration } ) + var file_realtimeanalytics_v1_query_proto_depIdxs = []int32{ 2, // 0: realtimeanalytics.v1.QueryMongoDBData.operation_start_time:type_name -> google.protobuf.Timestamp 3, // 1: realtimeanalytics.v1.QueryData.query_execution_duration:type_name -> google.protobuf.Duration diff --git a/api/realtimeanalytics/v1/realtimeanalytics.pb.go b/api/realtimeanalytics/v1/realtimeanalytics.pb.go index bd339f4bad9..8dbdbf8ccff 100644 --- a/api/realtimeanalytics/v1/realtimeanalytics.pb.go +++ b/api/realtimeanalytics/v1/realtimeanalytics.pb.go @@ -718,6 +718,7 @@ var ( (*QueryData)(nil), // 16: realtimeanalytics.v1.QueryData } ) + var file_realtimeanalytics_v1_realtimeanalytics_proto_depIdxs = []int32{ 12, // 0: realtimeanalytics.v1.ListServicesRequest.service_type:type_name -> inventory.v1.ServiceType 13, // 1: realtimeanalytics.v1.ListServicesResponse.mongodb:type_name -> inventory.v1.MongoDBService diff --git a/api/server/v1/httperror.pb.go b/api/server/v1/httperror.pb.go index ef269ba2292..8778ad26272 100644 --- a/api/server/v1/httperror.pb.go +++ b/api/server/v1/httperror.pb.go @@ -127,6 +127,7 @@ var ( (*anypb.Any)(nil), // 1: google.protobuf.Any } ) + var file_server_v1_httperror_proto_depIdxs = []int32{ 1, // 0: server.v1.HttpError.details:type_name -> google.protobuf.Any 1, // [1:1] is the sub-list for method output_type diff --git a/api/server/v1/server.pb.go b/api/server/v1/server.pb.go index 9725e62d1f6..9c126e37793 100644 --- a/api/server/v1/server.pb.go +++ b/api/server/v1/server.pb.go @@ -1972,6 +1972,7 @@ var ( (*common.StringArray)(nil), // 29: common.StringArray } ) + var file_server_v1_server_proto_depIdxs = []int32{ 27, // 0: server.v1.VersionInfo.timestamp:type_name -> google.protobuf.Timestamp 1, // 1: server.v1.VersionResponse.server:type_name -> server.v1.VersionInfo diff --git a/api/uievents/v1/server.pb.go b/api/uievents/v1/server.pb.go index dc995a6e8e5..41d144b9c29 100644 --- a/api/uievents/v1/server.pb.go +++ b/api/uievents/v1/server.pb.go @@ -480,6 +480,7 @@ var ( nil, // 6: uievents.v1.UserFlowEvent.ParamsEntry } ) + var file_uievents_v1_server_proto_depIdxs = []int32{ 6, // 0: uievents.v1.UserFlowEvent.params:type_name -> uievents.v1.UserFlowEvent.ParamsEntry 0, // 1: uievents.v1.StoreRequest.notifications:type_name -> uievents.v1.NotificationEvent diff --git a/api/user/v1/user.pb.go b/api/user/v1/user.pb.go index 200364a0741..12a954ca3f4 100644 --- a/api/user/v1/user.pb.go +++ b/api/user/v1/user.pb.go @@ -507,6 +507,7 @@ var ( (*timestamppb.Timestamp)(nil), // 7: google.protobuf.Timestamp } ) + var file_user_v1_user_proto_depIdxs = []int32{ 7, // 0: user.v1.GetUserResponse.snoozed_at:type_name -> google.protobuf.Timestamp 7, // 1: user.v1.UpdateUserResponse.snoozed_at:type_name -> google.protobuf.Timestamp diff --git a/managed/services/management/mysql.go b/managed/services/management/mysql.go index 8d5b8f1b4b1..27faf5cde06 100644 --- a/managed/services/management/mysql.go +++ b/managed/services/management/mysql.go @@ -191,12 +191,13 @@ func (s *ManagementService) addMySQL(ctx context.Context, req *managementv1.AddM for _, f := range req.LogFiles { files = append(files, models.WatchedLogFile{Path: f, Type: "error"}) } - if _, err := models.CreateAgent(tx.Querier, models.DBLogWatcherAgentType, &models.CreateAgentParams{ + _, err := models.CreateAgent(tx.Querier, models.DBLogWatcherAgentType, &models.CreateAgentParams{ PMMAgentID: req.PmmAgentId, ServiceID: service.ServiceID, LogWatcherOptions: models.LogWatcherOptions{Files: files}, LogLevel: services.SpecifyLogLevel(req.LogLevel, inventoryv1.LogLevel_LOG_LEVEL_FATAL), - }); err != nil { + }) + if err != nil { return err } } From 13a41160ba35c2473cc879e7b8e29a72b51fefa9 Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Thu, 4 Jun 2026 03:31:06 +0300 Subject: [PATCH 11/12] PMM-14689 Fix linter errors --- agent/agents/supervisor/supervisor.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agent/agents/supervisor/supervisor.go b/agent/agents/supervisor/supervisor.go index 9e9234ac8e0..4939b23d9e3 100644 --- a/agent/agents/supervisor/supervisor.go +++ b/agent/agents/supervisor/supervisor.go @@ -858,11 +858,11 @@ func (s *Supervisor) processParams(agentID string, agentProcess *agentv1.SetStat processParams.Path = cfg.Paths.Nomad processParams.Env = append(processParams.Env, os.Environ()...) default: - return nil, fmt.Errorf("unhandled agent type %[1]s (%[1]d).", agentProcess.Type) //nolint:revive + return nil, fmt.Errorf("unhandled agent type %[1]s (%[1]d)", agentProcess.Type) //nolint:revive } if processParams.Path == "" { - return nil, fmt.Errorf("no path for agent type %[1]s (%[1]d).", agentProcess.Type) //nolint:revive + return nil, fmt.Errorf("no path for agent type %[1]s (%[1]d)", agentProcess.Type) //nolint:revive } tr := &templates.TemplateRenderer{ From 9be0bad8e78de0467c37eeff3c69325525191a0f Mon Sep 17 00:00:00 2001 From: Alex Demidoff Date: Thu, 4 Jun 2026 03:40:03 +0300 Subject: [PATCH 12/12] PMM-14689 Fix linter errors --- agent/agents/supervisor/supervisor.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agent/agents/supervisor/supervisor.go b/agent/agents/supervisor/supervisor.go index 4939b23d9e3..7deea278fcc 100644 --- a/agent/agents/supervisor/supervisor.go +++ b/agent/agents/supervisor/supervisor.go @@ -858,11 +858,11 @@ func (s *Supervisor) processParams(agentID string, agentProcess *agentv1.SetStat processParams.Path = cfg.Paths.Nomad processParams.Env = append(processParams.Env, os.Environ()...) default: - return nil, fmt.Errorf("unhandled agent type %[1]s (%[1]d)", agentProcess.Type) //nolint:revive + return nil, fmt.Errorf("unhandled agent type %[1]s (%[1]d)", agentProcess.Type) } if processParams.Path == "" { - return nil, fmt.Errorf("no path for agent type %[1]s (%[1]d)", agentProcess.Type) //nolint:revive + return nil, fmt.Errorf("no path for agent type %[1]s (%[1]d)", agentProcess.Type) } tr := &templates.TemplateRenderer{