diff --git a/daemon/started_service.go b/daemon/started_service.go index e33cdfbbb..e3b5896d5 100644 --- a/daemon/started_service.go +++ b/daemon/started_service.go @@ -110,6 +110,14 @@ func NewStartedService(options ServiceOptions) *StartedService { return s } +func (s *StartedService) SetOOMKillerOptions(enabled bool, killerDisabled bool, memoryLimit uint64) { + s.serviceAccess.Lock() + defer s.serviceAccess.Unlock() + s.oomKillerEnabled = enabled + s.oomKillerDisabled = killerDisabled + s.oomMemoryLimit = memoryLimit +} + func (s *StartedService) GetVersion(ctx context.Context, empty *emptypb.Empty) (*Version, error) { return &Version{ Version: C.Version, @@ -1113,6 +1121,60 @@ func resolveTailscaleEndpoint(instance *Instance, tag string) (adapter.Endpoint, return endpoint, nil } +func NewNetworkQualityTestProgress(progress networkquality.Progress) *NetworkQualityTestProgress { + return &NetworkQualityTestProgress{ + Phase: int32(progress.Phase), + DownloadCapacity: progress.DownloadCapacity, + UploadCapacity: progress.UploadCapacity, + DownloadRPM: progress.DownloadRPM, + UploadRPM: progress.UploadRPM, + IdleLatencyMs: progress.IdleLatencyMs, + ElapsedMs: progress.ElapsedMs, + DownloadCapacityAccuracy: int32(progress.DownloadCapacityAccuracy), + UploadCapacityAccuracy: int32(progress.UploadCapacityAccuracy), + DownloadRPMAccuracy: int32(progress.DownloadRPMAccuracy), + UploadRPMAccuracy: int32(progress.UploadRPMAccuracy), + } +} + +func NewNetworkQualityTestResult(result *networkquality.Result) *NetworkQualityTestProgress { + return &NetworkQualityTestProgress{ + Phase: int32(networkquality.PhaseDone), + DownloadCapacity: result.DownloadCapacity, + UploadCapacity: result.UploadCapacity, + DownloadRPM: result.DownloadRPM, + UploadRPM: result.UploadRPM, + IdleLatencyMs: result.IdleLatencyMs, + IsFinal: true, + DownloadCapacityAccuracy: int32(result.DownloadCapacityAccuracy), + UploadCapacityAccuracy: int32(result.UploadCapacityAccuracy), + DownloadRPMAccuracy: int32(result.DownloadRPMAccuracy), + UploadRPMAccuracy: int32(result.UploadRPMAccuracy), + } +} + +func NewSTUNTestProgress(progress stun.Progress) *STUNTestProgress { + return &STUNTestProgress{ + Phase: int32(progress.Phase), + ExternalAddr: progress.ExternalAddr, + LatencyMs: progress.LatencyMs, + NatMapping: int32(progress.NATMapping), + NatFiltering: int32(progress.NATFiltering), + } +} + +func NewSTUNTestResult(result *stun.Result) *STUNTestProgress { + return &STUNTestProgress{ + Phase: int32(stun.PhaseDone), + ExternalAddr: result.ExternalAddr, + LatencyMs: result.LatencyMs, + NatMapping: int32(result.NATMapping), + NatFiltering: int32(result.NATFiltering), + IsFinal: true, + NatTypeSupported: result.NATTypeSupported, + } +} + func (s *StartedService) StartNetworkQualityTest( request *NetworkQualityTestRequest, server grpc.ServerStreamingServer[NetworkQualityTestProgress], @@ -1147,19 +1209,7 @@ func (s *StartedService) StartNetworkQualityTest( MaxRuntime: time.Duration(request.MaxRuntimeSeconds) * time.Second, Context: server.Context(), OnProgress: func(p networkquality.Progress) { - _ = server.Send(&NetworkQualityTestProgress{ - Phase: int32(p.Phase), - DownloadCapacity: p.DownloadCapacity, - UploadCapacity: p.UploadCapacity, - DownloadRPM: p.DownloadRPM, - UploadRPM: p.UploadRPM, - IdleLatencyMs: p.IdleLatencyMs, - ElapsedMs: p.ElapsedMs, - DownloadCapacityAccuracy: int32(p.DownloadCapacityAccuracy), - UploadCapacityAccuracy: int32(p.UploadCapacityAccuracy), - DownloadRPMAccuracy: int32(p.DownloadRPMAccuracy), - UploadRPMAccuracy: int32(p.UploadRPMAccuracy), - }) + _ = server.Send(NewNetworkQualityTestProgress(p)) }, }) if nqErr != nil { @@ -1168,19 +1218,7 @@ func (s *StartedService) StartNetworkQualityTest( Error: nqErr.Error(), }) } - return server.Send(&NetworkQualityTestProgress{ - Phase: int32(networkquality.PhaseDone), - DownloadCapacity: result.DownloadCapacity, - UploadCapacity: result.UploadCapacity, - DownloadRPM: result.DownloadRPM, - UploadRPM: result.UploadRPM, - IdleLatencyMs: result.IdleLatencyMs, - IsFinal: true, - DownloadCapacityAccuracy: int32(result.DownloadCapacityAccuracy), - UploadCapacityAccuracy: int32(result.UploadCapacityAccuracy), - DownloadRPMAccuracy: int32(result.DownloadRPMAccuracy), - UploadRPMAccuracy: int32(result.UploadRPMAccuracy), - }) + return server.Send(NewNetworkQualityTestResult(result)) } func (s *StartedService) StartSTUNTest( @@ -1207,13 +1245,7 @@ func (s *StartedService) StartSTUNTest( Dialer: resolvedDialer, Context: server.Context(), OnProgress: func(p stun.Progress) { - _ = server.Send(&STUNTestProgress{ - Phase: int32(p.Phase), - ExternalAddr: p.ExternalAddr, - LatencyMs: p.LatencyMs, - NatMapping: int32(p.NATMapping), - NatFiltering: int32(p.NATFiltering), - }) + _ = server.Send(NewSTUNTestProgress(p)) }, }) if stunErr != nil { @@ -1222,15 +1254,7 @@ func (s *StartedService) StartSTUNTest( Error: stunErr.Error(), }) } - return server.Send(&STUNTestProgress{ - Phase: int32(stun.PhaseDone), - ExternalAddr: result.ExternalAddr, - LatencyMs: result.LatencyMs, - NatMapping: int32(result.NATMapping), - NatFiltering: int32(result.NATFiltering), - IsFinal: true, - NatTypeSupported: result.NATTypeSupported, - }) + return server.Send(NewSTUNTestResult(result)) } func (s *StartedService) SubscribeTailscaleStatus( diff --git a/experimental/libbox/oom_report.go b/experimental/libbox/oom_report.go index 519446bab..a712f953b 100644 --- a/experimental/libbox/oom_report.go +++ b/experimental/libbox/oom_report.go @@ -68,6 +68,10 @@ type oomReporter struct { var _ oomkiller.OOMReporter = (*oomReporter)(nil) +func NewOOMReporter(startedService *daemon.StartedService) oomkiller.OOMReporter { + return &oomReporter{startedService: startedService} +} + func (r *oomReporter) WriteReport(memoryUsage uint64) error { draftPath := filepath.Join(sWorkingPath, "oom_draft") draftInfo, err := os.Stat(draftPath)