added logger for grouptasks and system

main
alex 2023-06-26 22:06:25 +02:00
parent a6c9eb2900
commit 43a25f817b
12 changed files with 441 additions and 9 deletions

View File

@ -0,0 +1,11 @@
[
{
"id": 0,
"languages": [
{
"lang": "en",
"message": "%userId% has started group tasks"
}
]
}
]

103
log.json Normal file
View File

@ -0,0 +1,103 @@
{"Id":0,"Time":"2023-06-26T14:40:53.344359537+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:40:54.388697469+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:41:08.397273014+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:41:09.059905327+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:44:00.704064229+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:44:00.757018863+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:48:22.373511048+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:48:23.113997674+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:48:32.581372985+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:48:33.399112571+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:53:21.353456966+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:53:21.392168992+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:53:42.372417807+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:53:42.479579138+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:53:53.388534593+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T14:53:53.569891973+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T15:15:55.476845699+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T15:15:55.562110779+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T15:18:00.139081715+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T15:18:00.188060672+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T15:20:56.252674262+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T15:20:56.322052586+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T15:21:34.183104637+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:21:34.238983689+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:21:47.901594058+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:21:47.957861269+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:21:55.00618043+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:21:55.094324945+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:28:17.378472657+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:28:17.442670752+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:46:42.852109566+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:46:44.117866181+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:51:04.075699656+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:51:04.139294474+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:53:33.812822579+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:53:55.750431162+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:54:23.509249057+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:54:32.489746458+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:54:42.425441725+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T15:56:05.308186703+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:01:23.072004383+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:01:46.172679342+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:03:39.737390245+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:04:05.088615344+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:04:21.533500276+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:05:02.034541248+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:05:06.571337816+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:15:54.596922828+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:15:54.663200369+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:16:58.723786041+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:16:58.778960869+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:17:14.941884767+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:23:21.562944663+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:23:22.371236719+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:23:38.205995944+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:23:44.81232114+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:25:37.248649355+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:25:37.80611411+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:25:46.934383621+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:25:47.015168493+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:26:23.528932114+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:27:19.857060312+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:31:50.791041651+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:37:07.810002714+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:37:08.514678749+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:59:33.232327496+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T16:59:33.85629423+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:15:41.86545891+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:15:41.935428528+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:15:43.062270121+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:15:43.859232118+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:19:02.902554585+02:00","Type":1,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:19:02.952776992+02:00","Type":1,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:19:03.001309906+02:00","Type":1,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:19:03.040355365+02:00","Type":1,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:19:58.303858277+02:00","Type":3,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:19:58.826549462+02:00","Type":3,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:19:58.869519116+02:00","Type":3,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:19:59.210307836+02:00","Type":3,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:20:17.84431075+02:00","Type":2,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:20:17.898623303+02:00","Type":2,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:20:17.985769915+02:00","Type":2,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:20:18.049521892+02:00","Type":2,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:25:10.872894974+02:00","Type":2,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:25:26.032539587+02:00","Type":2,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
{"Id":0,"Time":"2023-06-26T17:28:51.958849106+02:00","Type":2,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T17:28:52.051645006+02:00","Type":2,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T17:28:52.0958333+02:00","Type":2,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T17:29:09.128923843+02:00","Type":2,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T17:29:09.179518658+02:00","Type":2,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T17:29:10.007487297+02:00","Type":2,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T17:29:23.009030867+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T17:29:23.079119037+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T17:29:23.146551593+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T17:35:05.91026836+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T17:35:06.030515145+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T17:35:07.115992125+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T17:35:07.803301779+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T17:35:39.912754022+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T18:49:59.589837134+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T19:00:39.906990709+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
{"Id":0,"Time":"2023-06-26T19:03:21.070788107+02:00","Type":0,"Messages":[{"Type":"userId","Value":"34a2e968-8769-4794-97f9-8134db97d50f"}]}
{"Id":0,"Time":"2023-06-26T19:03:21.109272654+02:00","Type":0,"Messages":[{"Type":"userId","Value":"34a2e968-8769-4794-97f9-8134db97d50f"}]}

View File

@ -21,6 +21,7 @@ func init() {
config.LoadConfig()
logger.InitLogger()
utils.ValidatorInit()
logger.ReadLanguageLogMessages()
systempermissions.InitSystemPermissions()
grouptasks.LoadGroups("")
database.InitDatabase()

View File

@ -37,13 +37,22 @@ func InitDatabase() {
db.AutoMigrate(&structs.Role{})
db.AutoMigrate(&structs.RolePermission{})
/* masterRoleId := handleMasterRolePermissions() */
handleMasterRolePermissions()
//createUser(masterRoleId)
masterRoleId := handleMasterRolePermissions()
//handleMasterRolePermissions()
createDefaultAdminUser(masterRoleId)
}
func createUser(masterRoleId string) {
pw := []byte("haha")
func createDefaultAdminUser(masterRoleId string) {
var userCount int64
DB.Model(&structs.User{}).Count(&userCount)
if userCount > 0 {
return
}
log.Info().Msg("No users found. Master account was created:")
pw := []byte("adminadmin")
hashedPassword, err := bcrypt.GenerateFromPassword(pw, bcrypt.DefaultCost)
@ -51,14 +60,19 @@ func createUser(masterRoleId string) {
panic(err)
}
DB.Create(&structs.User{
user := structs.User{
Id: uuid.New().String(),
RoleId: masterRoleId,
Username: "Alex",
Email: "alex@roese.dev",
Username: "admin",
Email: "admin@roese.dev",
Password: string(hashedPassword),
CreatedAt: time.Now(),
})
}
DB.Create(&user)
log.Info().Msgf("Username: %s", user.Username)
log.Info().Msgf("Password: %s", string(pw))
}
func handleMasterRolePermissions() (roleId string) {

View File

@ -1,13 +1,33 @@
package logger
import (
"bufio"
"encoding/json"
"fmt"
"io/ioutil"
"janex/admin-dashboard-backend/modules/config"
"janex/admin-dashboard-backend/modules/structs"
"os"
"sort"
"strconv"
"strings"
"time"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
var systemLanguageLogMessages []structs.LanguageLogMessages
var grouptasksLanguageLogMessages []structs.LanguageLogMessages
const (
systemLogsRootPath = "./logs/system/"
groupTasksLogsRootPath = "./logs/grouptasks/"
systemLanguageLogPath = "./system_lang_log_messages.json"
grouptasksLanguageLogPath = "./grouptasks_lang_log_messages.json"
)
func InitLogger() {
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
@ -21,3 +41,176 @@ func InitLogger() {
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: "15:04:05"})
}
}
func AddSystemLog(logMessage structs.LogMessage) {
addLog(logMessage, true)
}
func AddGroupTasksLog(logMessage structs.LogMessage) {
addLog(logMessage, false)
}
func addLog(logMessage structs.LogMessage, systemLog bool) {
year, month, day := time.Now().Date()
path := systemLogsRootPath
if !systemLog {
path = groupTasksLogsRootPath
}
f, err := os.OpenFile(path+strconv.Itoa(day)+"-"+strconv.Itoa(int(month))+"-"+strconv.Itoa(year)+".json", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
if err != nil {
log.Error().Msgf("Failed to open log file %s", err.Error())
return
}
defer f.Close()
logMessage.Time = time.Now()
file, _ := json.Marshal(logMessage)
if _, err = fmt.Fprintln(f, string(file)); err != nil {
log.Error().Msgf("Failed to write to log file %s", err.Error())
}
}
func ReadLogs(date string, systemLogs bool) []structs.LogMessageResponse {
path := systemLogsRootPath
if !systemLogs {
path = groupTasksLogsRootPath
}
file, err := os.Open(path + date + ".json")
if err != nil {
log.Error().Msgf("Failed to read log file %s", err.Error())
return nil
}
defer file.Close()
fileScanner := bufio.NewScanner(file)
var logMessages []structs.LogMessageResponse
for fileScanner.Scan() {
var logMessage structs.LogMessage
if err := json.Unmarshal(fileScanner.Bytes(), &logMessage); err != nil {
log.Error().Msgf("Failed to unmarshal log message %v", err.Error())
}
var languageLogMessages []structs.LanguageLogMessages
if systemLogs {
languageLogMessages = systemLanguageLogMessages
} else {
languageLogMessages = grouptasksLanguageLogMessages
}
for _, systemLanguageLogMessage := range languageLogMessages {
if logMessage.Id == systemLanguageLogMessage.Id {
replacedLogMessage := systemLanguageLogMessage.Languages[0].Message
for _, message := range logMessage.Messages {
replacedLogMessage = strings.ReplaceAll(replacedLogMessage, "%"+message.Type+"%", message.Value)
}
logMessages = append(logMessages, structs.LogMessageResponse{
Time: logMessage.Time,
Type: logMessage.Type,
Message: replacedLogMessage,
})
break
}
}
}
if err := fileScanner.Err(); err != nil {
log.Error().Msgf("Error while reading file: %s", err)
return nil
}
return logMessages
}
func GetAllLogMessagesDates(systemLogs bool) []string {
path := systemLogsRootPath
if !systemLogs {
path = groupTasksLogsRootPath
}
files, err := ioutil.ReadDir(path)
if err != nil {
log.Error().Msgf("Failed to read log messages directory %s", err.Error())
return []string{}
}
var dates []string
for _, file := range files {
dates = append(dates, strings.Split(file.Name(), ".")[0])
}
layout := "2-1-2006"
parsedDates := make([]time.Time, len(dates))
for i, dateStr := range dates {
parsedDate, err := time.Parse(layout, dateStr)
if err != nil {
log.Error().Msgf("Failed to parse date %s", err.Error())
return []string{}
}
parsedDates[i] = parsedDate
}
sort.Slice(parsedDates, func(i, j int) bool {
return parsedDates[i].Before(parsedDates[j])
})
sortedDates := []string{}
for _, date := range parsedDates {
sortedDates = append(sortedDates, date.Format(layout))
}
return sortedDates
}
func ReadLanguageLogMessages() {
readLanguageLogMessages(true)
readLanguageLogMessages(false)
}
func readLanguageLogMessages(systemLogs bool) {
path := systemLanguageLogPath
if !systemLogs {
path = grouptasksLanguageLogPath
}
content, err := ioutil.ReadFile(path)
if err != nil {
panic("Could not read language log messages: " + err.Error())
}
var langLogMessages []structs.LanguageLogMessages
if err = json.Unmarshal(content, &langLogMessages); err != nil {
panic("Failed to unmarshal: " + err.Error())
}
if systemLogs {
systemLanguageLogMessages = langLogMessages
} else {
grouptasksLanguageLogMessages = langLogMessages
}
}

33
modules/structs/log.go Normal file
View File

@ -0,0 +1,33 @@
package structs
import (
"time"
)
type LogMessage struct {
Id uint16
Time time.Time
Type uint8
Messages []LogData
}
type LogData struct {
Type string
Value string
}
type LanguageLogMessages struct {
Id uint16
Languages []LanguageLogMessagesLanguage
}
type LanguageLogMessagesLanguage struct {
Lang string
Message string
}
type LogMessageResponse struct {
Time time.Time
Type uint8
Message string
}

View File

@ -120,3 +120,8 @@ const (
PermissionAdminAreaMoveRoleUpDown = _adminAreaRoles + "move_role_up_down"
PermissionAdminAreaLogs = _adminArea + "logs"
)
const (
LogTypeInfo = 0
LogTypeError = 1
)

View File

@ -0,0 +1,42 @@
package logger
import (
"janex/admin-dashboard-backend/modules/logger"
"janex/admin-dashboard-backend/modules/structs"
"janex/admin-dashboard-backend/modules/utils"
"janex/admin-dashboard-backend/socketclients"
"github.com/gofiber/fiber/v2"
)
func GetSystemLog(c *fiber.Ctx) error {
t := c.Query("type")
date := c.Query("date")
if t == "" || date == "" {
return c.SendStatus(fiber.StatusBadRequest)
}
if t == "g" && !socketclients.HasPermission(c.Locals("userId").(string), utils.PermissionGroupTasksHistory) || t == "s" && !socketclients.HasPermission(c.Locals("userId").(string), utils.PermissionAdminAreaLogs) {
return c.SendStatus(fiber.StatusUnauthorized)
}
if t == "g" { // grouptasks logs
return c.JSON(struct {
Logs []structs.LogMessageResponse
Dates []string
}{
Logs: logger.ReadLogs(date, false),
Dates: logger.GetAllLogMessagesDates(false),
})
}
// system logs
return c.JSON(struct {
Logs []structs.LogMessageResponse
Dates []string
}{
Logs: logger.ReadLogs(date, true),
Dates: logger.GetAllLogMessagesDates(true),
})
}

View File

@ -5,6 +5,7 @@ import (
"janex/admin-dashboard-backend/modules/structs"
"janex/admin-dashboard-backend/modules/utils"
"janex/admin-dashboard-backend/routers/router/api/v1/jxscanner"
log "janex/admin-dashboard-backend/routers/router/api/v1/logger"
"janex/admin-dashboard-backend/routers/router/api/v1/user"
"github.com/gofiber/fiber/v2"
@ -24,6 +25,9 @@ func SetupRoutes(app *fiber.App) {
s.Post("/scan", scannerSessionValidation, jxscanner.ScanResult)
s.Delete("/", scannerSessionValidation, jxscanner.DeleteScanner)
l := v1.Group("/log")
l.Get("/", userSessionValidation, log.GetSystemLog)
app.Static("/", "./public")
}

View File

@ -722,11 +722,13 @@ func AllUsersCreateNewUser(sessionId string, body map[string]interface{}) {
Username string
RoleId string
ConnectionStatus uint8
Deactivated bool
}{
Id: newUser.Id,
Username: username,
RoleId: roleId,
ConnectionStatus: utils.ConnectionStateOffline,
Deactivated: false,
},
})
}

View File

@ -6,6 +6,7 @@ import (
"janex/admin-dashboard-backend/modules/cache"
"janex/admin-dashboard-backend/modules/database"
"janex/admin-dashboard-backend/modules/grouptasks"
"janex/admin-dashboard-backend/modules/logger"
"janex/admin-dashboard-backend/modules/structs"
"janex/admin-dashboard-backend/modules/utils"
"janex/admin-dashboard-backend/socketclients"
@ -86,6 +87,18 @@ func RunHub() {
socketclients.UpdateConnectedUsers(userId)
socketclients.UpdateUserSessionsForUser(userId, sessionId)
logger.AddSystemLog(structs.LogMessage{
Id: 0,
Type: utils.LogTypeInfo,
Messages: []structs.LogData{
{Type: "userId", Value: user.Id}}})
logger.AddGroupTasksLog(structs.LogMessage{
Id: 0,
Type: utils.LogTypeInfo,
Messages: []structs.LogData{
{Type: "userId", Value: user.Id}}})
case data := <-broadcast:
var receivedMessage structs.ReceivedMessage

View File

@ -0,0 +1,11 @@
[
{
"id": 0,
"languages": [
{
"lang": "en",
"message": "%userId% has logged in"
}
]
}
]