ソースを参照

chore: reduce gocyclo

jamesread 5 ヶ月 前
コミット
f173a0b725
2 ファイル変更67 行追加36 行削除
  1. 23 10
      service/internal/api/api.go
  2. 44 26
      service/internal/executor/executor.go

+ 23 - 10
service/internal/api/api.go

@@ -919,7 +919,6 @@ func discoverAvailableThemes(cfg *config.Config) []string {
 	}
 
 	themesDir := path.Join(configDir, "custom-webui", "themes")
-
 	entries, err := os.ReadDir(themesDir)
 	if err != nil {
 		log.WithFields(log.Fields{
@@ -929,22 +928,36 @@ func discoverAvailableThemes(cfg *config.Config) []string {
 		return []string{}
 	}
 
+	themes := collectValidThemes(themesDir, entries)
+	sort.Strings(themes)
+	return themes
+}
+
+// collectValidThemes collects theme names from directory entries that have a theme.css file.
+func collectValidThemes(themesDir string, entries []os.DirEntry) []string {
 	var themes []string
 	for _, entry := range entries {
-		if !entry.IsDir() {
-			continue
+		if themeName := getValidThemeName(themesDir, entry); themeName != "" {
+			themes = append(themes, themeName)
 		}
+	}
+	return themes
+}
 
-		themeName := entry.Name()
-		themeCssPath := path.Join(themesDir, themeName, "theme.css")
+// getValidThemeName returns the theme name if the entry is a valid theme directory with theme.css, otherwise returns empty string.
+func getValidThemeName(themesDir string, entry os.DirEntry) string {
+	if !entry.IsDir() {
+		return ""
+	}
 
-		if _, err := os.Stat(themeCssPath); err == nil {
-			themes = append(themes, themeName)
-		}
+	themeName := entry.Name()
+	themeCssPath := path.Join(themesDir, themeName, "theme.css")
+
+	if _, err := os.Stat(themeCssPath); err != nil {
+		return ""
 	}
 
-	sort.Strings(themes)
-	return themes
+	return themeName
 }
 
 func (api *oliveTinAPI) buildRootDashboards(user *authpublic.AuthenticatedUser, dashboards []*config.DashboardComponent) []string {

+ 44 - 26
service/internal/executor/executor.go

@@ -239,36 +239,12 @@ func (e *Executor) filterLogsByACL(cfg *config.Config, user *authpublic.Authenti
 	defer e.logmutex.RUnlock()
 
 	filtered := make([]*InternalLogEntry, 0, len(e.logsTrackingIdsByDate))
-
-	var filterDate time.Time
-	var hasDateFilter bool
-	if dateFilter != "" {
-		parsedDate, err := time.Parse("2006-01-02", dateFilter)
-		if err != nil {
-			log.WithFields(log.Fields{
-				"dateFilter": dateFilter,
-				"error":      err,
-			}).Errorf("Failed to parse date filter, expected format YYYY-MM-DD")
-		} else {
-			filterDate = parsedDate
-			hasDateFilter = true
-		}
-	}
+	filterDate, hasDateFilter := parseDateFilter(dateFilter)
 
 	for _, trackingId := range e.logsTrackingIdsByDate {
 		entry := e.logs[trackingId]
 
-		if !isValidLogEntryForACL(entry) {
-			continue
-		}
-		if isLogEntryAllowedByACL(cfg, user, entry) {
-			if hasDateFilter {
-				entryDate := entry.DatetimeStarted.UTC().Truncate(24 * time.Hour)
-				filterDateUTC := filterDate.UTC().Truncate(24 * time.Hour)
-				if !entryDate.Equal(filterDateUTC) {
-					continue
-				}
-			}
+		if shouldIncludeLogEntry(cfg, user, entry, filterDate, hasDateFilter) {
 			filtered = append(filtered, entry)
 		}
 	}
@@ -276,6 +252,48 @@ func (e *Executor) filterLogsByACL(cfg *config.Config, user *authpublic.Authenti
 	return filtered
 }
 
+// parseDateFilter parses the date filter string and returns filter information.
+func parseDateFilter(dateFilter string) (filterDate time.Time, hasDateFilter bool) {
+	if dateFilter == "" {
+		return time.Time{}, false
+	}
+
+	parsedDate, err := time.Parse("2006-01-02", dateFilter)
+	if err != nil {
+		log.WithFields(log.Fields{
+			"dateFilter": dateFilter,
+			"error":      err,
+		}).Errorf("Failed to parse date filter, expected format YYYY-MM-DD")
+		return time.Time{}, false
+	}
+
+	return parsedDate, true
+}
+
+// shouldIncludeLogEntry determines if a log entry should be included based on ACL and date filter.
+func shouldIncludeLogEntry(cfg *config.Config, user *authpublic.AuthenticatedUser, entry *InternalLogEntry, filterDate time.Time, hasDateFilter bool) bool {
+	if !isValidLogEntryForACL(entry) {
+		return false
+	}
+
+	if !isLogEntryAllowedByACL(cfg, user, entry) {
+		return false
+	}
+
+	return matchesDateFilter(entry, filterDate, hasDateFilter)
+}
+
+// matchesDateFilter checks if the log entry matches the date filter.
+func matchesDateFilter(entry *InternalLogEntry, filterDate time.Time, hasDateFilter bool) bool {
+	if !hasDateFilter {
+		return true
+	}
+
+	entryDate := entry.DatetimeStarted.UTC().Truncate(24 * time.Hour)
+	filterDateUTC := filterDate.UTC().Truncate(24 * time.Hour)
+	return entryDate.Equal(filterDateUTC)
+}
+
 // paginateFilteredLogs applies pagination to a filtered list of logs and returns
 // the paginated results along with pagination metadata.
 func paginateFilteredLogs(filtered []*InternalLogEntry, startOffset int64, pageCount int64) ([]*InternalLogEntry, *PagingResult) {