Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ func main() {
daemon.StartMetricsServer("0.0.0.0:9091")
}

daemon.StartReadyServer("0.0.0.0:8081", tracker)
daemon.StartReadyServer("0.0.0.0:8081", tracker, stdoutToSocket)

// Wait for one ticker interval before loading the profile
// This allows linuxptp-daemon connection to the cloud-event-proxy container to
Expand Down
32 changes: 32 additions & 0 deletions pkg/daemon/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,17 @@ var ptpTmpFiles = []string{
pmcSocketName,
}

const socketDialTimeout = 5 * time.Second

func dialSocket() (net.Conn, error) {
c, err := net.DialTimeout("unix", eventSocket, socketDialTimeout)
if err != nil {
glog.Errorf("error trying to connect to event socket")
time.Sleep(connectionRetryInterval)
}
return c, err
}

// ProcessManager manages a set of ptpProcess
// which could be ptp4l, phc2sys or timemaster.
// Processes in ProcessManager will be started
Expand Down Expand Up @@ -171,6 +182,27 @@ func (p *ProcessManager) UpdateSynceConfig(config *synce.Relations) {

}

// EmitProcessStatusLogs emits process status logs using the EventHandler's
// managed connection with reconnection support.
func (p *ProcessManager) EmitProcessStatusLogs() {
for _, proc := range p.process {
status := PtpProcessUp
if proc.Stopped() {
status = PtpProcessDown
}
p.ptpEventHandler.EmitProcessStatusLog(proc.name, proc.configName, status)
}
}

// EmitClockClassLogs re-emits clock class via the EventHandler's managed connection.
func (p *ProcessManager) EmitClockClassLogs() {
for _, proc := range p.process {
if proc.name == ptp4lProcessName {
p.ptpEventHandler.EmitClockClass(proc.configName)
}
}
}

type tBCProcessAttributes struct {
controlledPortsConfigFile string
// Time receiver interface name for T-BC clock monitoring
Expand Down
28 changes: 27 additions & 1 deletion pkg/daemon/ready.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,36 @@ func (h readyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
}

func StartReadyServer(bindAddress string, tracker *ReadyTracker) {
type metricHandler struct {
tracker *ReadyTracker
}

func (h metricHandler) ServeHTTP(w http.ResponseWriter, _ *http.Request) {
if isReady, _ := h.tracker.Ready(); !isReady {
w.WriteHeader(http.StatusNoContent)
return
}
w.WriteHeader(http.StatusOK)

go func() {
eventHandler := h.tracker.processManager.ptpEventHandler
eventHandler.EmitClockSyncLogs()
eventHandler.EmitPortRoleLogs()

processManager := h.tracker.processManager
go processManager.EmitProcessStatusLogs()
go processManager.EmitClockClassLogs()
}()
}

// StartReadyServer ...
func StartReadyServer(bindAddress string, tracker *ReadyTracker, serveInitMetrics bool) {
glog.Info("Starting Ready Server")
mux := http.NewServeMux()
mux.Handle("/ready", readyHandler{tracker: tracker})
if serveInitMetrics {
mux.Handle("/emit-logs", metricHandler{tracker: tracker})
}
go utilwait.Until(func() {
err := http.ListenAndServe(bindAddress, mux)
if err != nil {
Expand Down
Loading