Skip to content

Commit dd92561

Browse files
committed
refactor(be): add log write service
1 parent ef47533 commit dd92561

File tree

8 files changed

+81
-57
lines changed

8 files changed

+81
-57
lines changed

api/helpers/event_log.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package helpers
22

33
import (
44
"github.com/semaphoreui/semaphore/db"
5-
"github.com/semaphoreui/semaphore/util"
5+
"github.com/semaphoreui/semaphore/pro_interfaces"
66
log "github.com/sirupsen/logrus"
77
"net/http"
88
)
@@ -51,7 +51,9 @@ func EventLog(r *http.Request, action EventLogType, item EventLogItem) {
5151
log.WithFields(logFields).Error("Failed to store event")
5252
}
5353

54-
if err := util.Config.Log.Events.Write(util.EventLogRecord{
54+
logWriter := GetFromContext(r, "log_writer").(pro_interfaces.LogWriteService)
55+
56+
if err := logWriter.WriteEventLog(pro_interfaces.EventLogRecord{
5557
Action: string(action),
5658
ProjectID: event.ProjectID,
5759
UserID: event.UserID,

cli/cmd/root.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,14 @@ func runService() {
8888
secretStorageService := server.NewSecretStorageService(store, accessKeyService)
8989
environmentService := server.NewEnvironmentService(store, encryptionService)
9090
subscriptionService := proServer.NewSubscriptionService(store, store)
91+
logWriteService := proServer.NewLogWriteService()
9192

9293
taskPool := tasks.CreateTaskPool(
9394
store,
9495
inventoryService,
9596
encryptionService,
9697
accessKeyInstallationService,
98+
logWriteService,
9799
)
98100

99101
schedulePool := schedules.CreateSchedulePool(
@@ -143,6 +145,7 @@ func runService() {
143145
r = helpers.SetContextValue(r, "store", store)
144146
r = helpers.SetContextValue(r, "schedule_pool", schedulePool)
145147
r = helpers.SetContextValue(r, "task_pool", &taskPool)
148+
r = helpers.SetContextValue(r, "log_writer", logWriteService)
146149
next.ServeHTTP(w, r)
147150
})
148151
})

pro/services/server/log_write_svc.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package server
2+
3+
import "github.com/semaphoreui/semaphore/pro_interfaces"
4+
5+
type LogWriteServiceImpl struct {
6+
}
7+
8+
// NewLogWriteService creates a new instance of LogWriteServiceImpl.
9+
func NewLogWriteService() pro_interfaces.LogWriteService {
10+
return &LogWriteServiceImpl{}
11+
}
12+
13+
func (l *LogWriteServiceImpl) WriteEventLog(event pro_interfaces.EventLogRecord) error {
14+
return nil
15+
}
16+
17+
func (l *LogWriteServiceImpl) WriteTaskLog(task pro_interfaces.TaskLogRecord) error {
18+
return nil
19+
}

pro_interfaces/log_write_svc.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package pro_interfaces
2+
3+
import "github.com/semaphoreui/semaphore/pkg/task_logger"
4+
5+
type LogWriteService interface {
6+
WriteEventLog(event EventLogRecord) error
7+
WriteTaskLog(task TaskLogRecord) error
8+
}
9+
10+
type EventLogRecord struct {
11+
Action string `json:"action"`
12+
UserID *int `json:"user,omitempty"`
13+
IntegrationID *int `json:"integration,omitempty"`
14+
ProjectID *int `json:"project,omitempty"`
15+
Description *string `json:"description,omitempty"`
16+
}
17+
18+
type TaskLogRecord struct {
19+
Username string `json:"username,omitempty"`
20+
TaskID int `json:"task"`
21+
ProjectID int `json:"project"`
22+
TemplateID int `json:"template"`
23+
TemplateName string `json:"template_name"`
24+
UserID *int `json:"user,omitempty"`
25+
Description *string `json:"-"`
26+
RunnerID *int `json:"runner,omitempty"`
27+
Status task_logger.TaskStatus `json:"status"`
28+
}

services/tasks/TaskPool.go

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"github.com/semaphoreui/semaphore/pkg/random"
66
"github.com/semaphoreui/semaphore/pkg/tz"
77
"github.com/semaphoreui/semaphore/pro/pkg/stage_parsers"
8+
"github.com/semaphoreui/semaphore/pro_interfaces"
89
"github.com/semaphoreui/semaphore/services/server"
910
"regexp"
1011
"slices"
@@ -57,6 +58,7 @@ type TaskPool struct {
5758
logger chan logRecord
5859

5960
store db.Store
61+
logWriteService pro_interfaces.LogWriteService
6062
inventoryService server.InventoryService
6163
encryptionService server.AccessKeyEncryptionService
6264
keyInstallationService server.AccessKeyInstallationService
@@ -66,6 +68,28 @@ type TaskPool struct {
6668
aliases map[string]*TaskRunner
6769
}
6870

71+
func CreateTaskPool(
72+
store db.Store,
73+
inventoryService server.InventoryService,
74+
encryptionService server.AccessKeyEncryptionService,
75+
keyInstallationService server.AccessKeyInstallationService,
76+
logWriteService pro_interfaces.LogWriteService,
77+
) TaskPool {
78+
return TaskPool{
79+
Queue: make([]*TaskRunner, 0), // queue of waiting tasks
80+
register: make(chan *TaskRunner), // add TaskRunner to queue
81+
activeProj: make(map[int]map[int]*TaskRunner),
82+
RunningTasks: make(map[int]*TaskRunner), // working tasks
83+
logger: make(chan logRecord, 10000), // store log records to database
84+
store: store,
85+
queueEvents: make(chan PoolEvent),
86+
aliases: make(map[string]*TaskRunner),
87+
inventoryService: inventoryService,
88+
encryptionService: encryptionService,
89+
logWriteService: logWriteService,
90+
keyInstallationService: keyInstallationService,
91+
}
92+
}
6993
func (p *TaskPool) GetNumberOfRunningTasksOfRunner(runnerID int) (res int) {
7094
for _, task := range p.RunningTasks {
7195
if task.RunnerID == runnerID {
@@ -282,27 +306,6 @@ func (p *TaskPool) blocks(t *TaskRunner) bool {
282306
return res
283307
}
284308

285-
func CreateTaskPool(
286-
store db.Store,
287-
inventoryService server.InventoryService,
288-
encryptionService server.AccessKeyEncryptionService,
289-
keyInstallationService server.AccessKeyInstallationService,
290-
) TaskPool {
291-
return TaskPool{
292-
Queue: make([]*TaskRunner, 0), // queue of waiting tasks
293-
register: make(chan *TaskRunner), // add TaskRunner to queue
294-
activeProj: make(map[int]map[int]*TaskRunner),
295-
RunningTasks: make(map[int]*TaskRunner), // working tasks
296-
logger: make(chan logRecord, 10000), // store log records to database
297-
store: store,
298-
queueEvents: make(chan PoolEvent),
299-
aliases: make(map[string]*TaskRunner),
300-
inventoryService: inventoryService,
301-
encryptionService: encryptionService,
302-
keyInstallationService: keyInstallationService,
303-
}
304-
}
305-
306309
func (p *TaskPool) ConfirmTask(targetTask db.Task) error {
307310
tsk := p.GetTask(targetTask.ID)
308311

services/tasks/TaskRunner.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"errors"
66
"github.com/semaphoreui/semaphore/db_lib"
77
"github.com/semaphoreui/semaphore/pkg/tz"
8+
"github.com/semaphoreui/semaphore/pro_interfaces"
89
"github.com/semaphoreui/semaphore/services/tasks/hooks"
910
"os"
1011
"strconv"
@@ -135,8 +136,8 @@ func (t *TaskRunner) createTaskEvent() {
135136
if t.RunnerID > 0 {
136137
runnerID = &t.RunnerID
137138
}
138-
139-
if err := util.Config.Log.Tasks.Write(util.TaskLogRecord{
139+
140+
if err := t.pool.logWriteService.WriteTaskLog(pro_interfaces.TaskLogRecord{
140141
ProjectID: t.Task.ProjectID,
141142
TemplateID: t.Template.ID,
142143
TemplateName: t.Template.Name,

util/config.go

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
"strconv"
2020
"strings"
2121

22-
"github.com/semaphoreui/semaphore/pkg/task_logger"
2322
"golang.org/x/crypto/bcrypt"
2423
"gopkg.in/natefinch/lumberjack.v2"
2524

@@ -144,14 +143,6 @@ type EventLogType struct {
144143
Logger *lumberjack.Logger `json:"logger,omitempty" env:"SEMAPHORE_EVENT_LOGGER"`
145144
}
146145

147-
type EventLogRecord struct {
148-
Action string `json:"action"`
149-
UserID *int `json:"user,omitempty"`
150-
IntegrationID *int `json:"integration,omitempty"`
151-
ProjectID *int `json:"project,omitempty"`
152-
Description *string `json:"description,omitempty"`
153-
}
154-
155146
type FileLogFormat string
156147

157148
const (
@@ -166,18 +157,6 @@ type TaskLogType struct {
166157
ResultLogger *lumberjack.Logger `json:"result_logger,omitempty" env:"SEMAPHORE_TASK_RESULT_LOGGER"`
167158
}
168159

169-
type TaskLogRecord struct {
170-
Username string `json:"username,omitempty"`
171-
TaskID int `json:"task"`
172-
ProjectID int `json:"project"`
173-
TemplateID int `json:"template"`
174-
TemplateName string `json:"template_name"`
175-
UserID *int `json:"user,omitempty"`
176-
Description *string `json:"-"`
177-
RunnerID *int `json:"runner,omitempty"`
178-
Status task_logger.TaskStatus `json:"status"`
179-
}
180-
181160
type ConfigLog struct {
182161
Events *EventLogType `json:"events,omitempty"`
183162
Tasks *TaskLogType `json:"tasks,omitempty"`

util/config_logfile.go

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)