@@ -75,9 +75,13 @@ type ExpressionBackend struct {
7575
7676type ConfigState struct {
7777 AssetsLastUpdate time.Time
78+ AssetsCount int
7879 RulesLastUpdate time.Time
80+ RulesCount int
7981 FiltersLastUpdate time.Time
82+ FiltersCount int
8083 PatternsLastUpdate time.Time
84+ PatternsCount int
8185}
8286
8387func (b * ExpressionBackend ) ToExpression () Expression {
@@ -431,26 +435,35 @@ func hasChanges(db *sql.DB, state *ConfigState) (bool, ConfigState, error) {
431435 changed := false
432436
433437 queries := []struct {
434- query string
435- target * time.Time
436- old time.Time
438+ timestampQuery string
439+ countQuery string
440+ targetTime * time.Time
441+ targetCount * int
442+ oldTime time.Time
443+ oldCount int
437444 }{
438- {"SELECT MAX(last_update) FROM utm_tenant_config" , & newState .AssetsLastUpdate , state .AssetsLastUpdate },
439- {"SELECT MAX(rule_last_update) FROM utm_correlation_rules" , & newState .RulesLastUpdate , state .RulesLastUpdate },
440- {"SELECT MAX(updated_at) FROM utm_logstash_filter" , & newState .FiltersLastUpdate , state .FiltersLastUpdate },
441- {"SELECT MAX(last_update) FROM utm_regex_pattern" , & newState .PatternsLastUpdate , state .PatternsLastUpdate },
445+ {"SELECT MAX(last_update) FROM utm_tenant_config" , "SELECT COUNT(*) FROM utm_tenant_config" , & newState .AssetsLastUpdate , & newState . AssetsCount , state .AssetsLastUpdate , state . AssetsCount },
446+ {"SELECT MAX(rule_last_update) FROM utm_correlation_rules" , "SELECT COUNT(*) FROM utm_correlation_rules WHERE rule_active = true" , & newState .RulesLastUpdate , & newState . RulesCount , state .RulesLastUpdate , state . RulesCount },
447+ {"SELECT MAX(updated_at) FROM utm_logstash_filter" , "SELECT COUNT(*) FROM utm_logstash_filter WHERE is_active = true" , & newState .FiltersLastUpdate , & newState . FiltersCount , state .FiltersLastUpdate , state . FiltersCount },
448+ {"SELECT MAX(last_update) FROM utm_regex_pattern" , "SELECT COUNT(*) FROM utm_regex_pattern" , & newState .PatternsLastUpdate , & newState . PatternsCount , state .PatternsLastUpdate , state . PatternsCount },
442449 }
443450
444451 for _ , q := range queries {
445452 var lastUpdate sql.NullTime
446- err := db .QueryRow (q .query ).Scan (& lastUpdate )
453+ err := db .QueryRow (q .timestampQuery ).Scan (& lastUpdate )
447454 if err != nil {
448455 return false , newState , err
449456 }
450457 if lastUpdate .Valid {
451- * q .target = lastUpdate .Time
458+ * q .targetTime = lastUpdate .Time
452459 }
453- if (* q .target ).After (q .old ) {
460+
461+ err = db .QueryRow (q .countQuery ).Scan (q .targetCount )
462+ if err != nil {
463+ return false , newState , err
464+ }
465+
466+ if (* q .targetTime ).After (q .oldTime ) || * q .targetCount != q .oldCount {
454467 changed = true
455468 }
456469 }
0 commit comments