feat(gotenberg): add ConversionsSinceRestart accessor to ProcessSupervisor

This commit is contained in:
Julien Neuhart
2026-06-02 19:23:45 +02:00
parent 7c630ecc6e
commit 2b20399a80
3 changed files with 48 additions and 7 deletions
+12 -7
View File
@@ -152,13 +152,14 @@ func (p *ProcessMock) Healthy(logger *slog.Logger) bool {
// ProcessSupervisorMock is a mock for the [ProcessSupervisor] interface.
type ProcessSupervisorMock struct {
LaunchMock func() error
ShutdownMock func() error
HealthyMock func() bool
RunMock func(ctx context.Context, logger *slog.Logger, task func() error) error
ReqQueueSizeMock func() int64
RestartsCountMock func() int64
ActiveTasksCountMock func() int64
LaunchMock func() error
ShutdownMock func() error
HealthyMock func() bool
RunMock func(ctx context.Context, logger *slog.Logger, task func() error) error
ReqQueueSizeMock func() int64
RestartsCountMock func() int64
ActiveTasksCountMock func() int64
ConversionsSinceRestartMock func() int64
}
func (s *ProcessSupervisorMock) Launch() error {
@@ -189,6 +190,10 @@ func (s *ProcessSupervisorMock) ActiveTasksCount() int64 {
return s.ActiveTasksCountMock()
}
func (s *ProcessSupervisorMock) ConversionsSinceRestart() int64 {
return s.ConversionsSinceRestartMock()
}
// MetricsProviderMock is a mock for the [MetricsProvider] interface.
type MetricsProviderMock struct {
MetricsMock func() ([]Metric, error)
+11
View File
@@ -76,6 +76,10 @@ type ProcessSupervisor interface {
// ActiveTasksCount returns the current number of active tasks.
ActiveTasksCount() int64
// ConversionsSinceRestart returns the number of tasks handled since the
// last process (re)start.
ConversionsSinceRestart() int64
}
// healthCheckCacheTTL caches successful health probe results so kubelet-
@@ -577,6 +581,13 @@ func (s *processSupervisor) ActiveTasksCount() int64 {
return s.activeTasks.Load()
}
// ConversionsSinceRestart returns the number of tasks handled since the last
// process (re)start. reqCounter is reset to zero on every restart and idle
// shutdown.
func (s *processSupervisor) ConversionsSinceRestart() int64 {
return s.reqCounter.Load()
}
// Interface guards.
var (
_ ProcessSupervisor = (*processSupervisor)(nil)
+25
View File
@@ -1091,3 +1091,28 @@ func TestProcessSupervisor_IdleShutdownSkippedWhenActive(t *testing.T) {
close(taskDone)
}
func TestProcessSupervisor_ConversionsSinceRestart(t *testing.T) {
process := &ProcessMock{
StartMock: func(*slog.Logger) error { return nil },
StopMock: func(*slog.Logger) error { return nil },
HealthyMock: func(*slog.Logger) bool { return true },
}
s := NewProcessSupervisor(slog.New(slog.DiscardHandler), process, 0, 0, 1, 0).(*processSupervisor)
if got := s.ConversionsSinceRestart(); got != 0 {
t.Errorf("expected 0 conversions initially, got %d", got)
}
s.reqCounter.Store(7)
if got := s.ConversionsSinceRestart(); got != 7 {
t.Errorf("expected 7 conversions, got %d", got)
}
if err := s.restart(); err != nil {
t.Fatalf("restart: %v", err)
}
if got := s.ConversionsSinceRestart(); got != 0 {
t.Errorf("expected 0 conversions after restart, got %d", got)
}
}