diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go index 23f1e6f2..611de0f2 100644 --- a/pkg/logger/logger.go +++ b/pkg/logger/logger.go @@ -84,22 +84,22 @@ type zerologEntry struct { type logRecordWriter struct{} -// remoteLogThresholds defines log level thresholds for specific callers (files). -// Logs below the specified level for a given file will not be sent to the alpacon-server. -// If a file is not listed, all logs will be sent regardless of level. -var remoteLogThresholds = map[string]int{ - "client.go": 30, - "reporter.go": 40, - "command.go": 30, - "commit.go": 30, - "pty.go": 30, +// logRecordFileHandlers defines log level thresholds for specific files. +// Only files listed here will have their logs sent to the remote server. +// Logs from files not listed will be ignored entirely. +// Logs below the specified level for a listed file will also be ignored. +var logRecordFileHandlers = map[string]int{ + "command.go": 30, + "commit.go": 10, + "pty.go": 30, + "shell.go": 20, } func (w *logRecordWriter) Write(p []byte) (n int, err error) { var entry zerologEntry err = json.Unmarshal(p, &entry) if err != nil { - return 0, err + return n, err } caller := entry.Caller @@ -113,10 +113,14 @@ func (w *logRecordWriter) Write(p []byte) (n int, err error) { } callerFileName := getCallerFileName(caller) - if levelThreshold, ok := remoteLogThresholds[callerFileName]; ok { - if convertLevelToNumber(entry.Level) < levelThreshold { - return len(p), nil - } + + levelThreshold, exists := logRecordFileHandlers[callerFileName] + if !exists { + return len(p), nil + } + + if convertLevelToNumber(entry.Level) < levelThreshold { + return len(p), nil } record := logRecord{ diff --git a/pkg/runner/shell.go b/pkg/runner/shell.go index c3369ef5..ad975587 100644 --- a/pkg/runner/shell.go +++ b/pkg/runner/shell.go @@ -28,12 +28,12 @@ func demote(username, groupname string) (*syscall.SysProcAttr, error) { usr, err := user.Lookup(username) if err != nil { - return nil, fmt.Errorf("There is no corresponding %s username in this server", username) + return nil, fmt.Errorf("there is no corresponding %s username in this server", username) } group, err := user.LookupGroup(groupname) if err != nil { - return nil, fmt.Errorf("There is no corresponding %s groupname in this server", groupname) + return nil, fmt.Errorf("there is no corresponding %s groupname in this server", groupname) } uid, err := strconv.Atoi(usr.Uid) diff --git a/pkg/scheduler/queue.go b/pkg/scheduler/queue.go index 44f86887..9aaf5620 100644 --- a/pkg/scheduler/queue.go +++ b/pkg/scheduler/queue.go @@ -52,9 +52,11 @@ func (rq *RequestQueue) request(method, url string, data interface{}, priority i retry: RetryLimit, } + // Do not wake reporter goroutine if the queue is full or uninitialized. err := rq.queue.Offer(entry) if err != nil { - log.Error().Err(err).Msg("Error offering priority entry") + log.Error().Err(err).Msgf("Queue is full or uninitialized, dropping entry: %s", entry.url) + return } rq.cond.Signal() diff --git a/pkg/scheduler/reporter.go b/pkg/scheduler/reporter.go index ca13dc38..04d06d7a 100644 --- a/pkg/scheduler/reporter.go +++ b/pkg/scheduler/reporter.go @@ -86,12 +86,11 @@ func (r *Reporter) query(entry PriorityEntry) { r.counters.failure++ if entry.retry > 0 { backoff := time.Duration(math.Pow(2, float64(RetryLimit-entry.retry))) * time.Second - entry.due = time.Now().Add(backoff) + entry.due = entry.due.Add(backoff) entry.retry-- err = Rqueue.queue.Offer(entry) if err != nil { r.counters.ignored++ - time.Sleep(1 * time.Second) } } else { r.counters.ignored++ @@ -117,8 +116,8 @@ func (r *Reporter) Run() { err = Rqueue.queue.Offer(entry) if err != nil { r.counters.ignored++ - time.Sleep(1 * time.Second) } + time.Sleep(1 * time.Second) } else { r.query(entry) } diff --git a/pkg/scheduler/session.go b/pkg/scheduler/session.go index 2a30bab8..f2ea0871 100644 --- a/pkg/scheduler/session.go +++ b/pkg/scheduler/session.go @@ -75,7 +75,7 @@ func (session *Session) CheckSession() bool { return commissioned } else { log.Error().Msg("Unable to find 'commissioned' field in the response") - return false + continue } } }