diff --git a/cmd/moncheck/main.go b/cmd/moncheck/main.go index 6aa34a5..3bac52e 100644 --- a/cmd/moncheck/main.go +++ b/cmd/moncheck/main.go @@ -27,11 +27,12 @@ var ( type ( Config struct { - DB string `json:"db"` - Timeout string `json:"timeout"` - Wait string `json:"wait"` - Path []string `json:"path"` - Workers int `json:"workers"` + DB string `json:"db"` + Timeout string `json:"timeout"` + Wait string `json:"wait"` + Path []string `json:"path"` + Workers int `json:"workers"` + CheckerID int `json:"checker_id"` } States []int @@ -73,14 +74,14 @@ func main() { } for i := 0; i < config.Workers; i++ { - go check(i, db, waitDuration, timeout, hostname) + go check(i, db, waitDuration, timeout, hostname, config.CheckerID) } wg := sync.WaitGroup{} wg.Add(1) wg.Wait() } -func check(thread int, db *sql.DB, waitDuration, timeout time.Duration, hostname string) { +func check(thread int, db *sql.DB, waitDuration, timeout time.Duration, hostname string, checker_id int) { for { tx, err := db.Begin() if err != nil { @@ -91,14 +92,10 @@ func check(thread int, db *sql.DB, waitDuration, timeout time.Duration, hostname from active_checks where next_time < now() and enabled + and checker_id = $1 order by next_time for update skip locked - limit 1;`) - if err != nil { - log.Printf("[%d] could not start query: %s", thread, err) - tx.Rollback() - continue - } + limit 1;`, checker_id) var ( id int64 cmdLine []string diff --git a/cmd/monwork/main.go b/cmd/monwork/main.go index 81bc347..4271213 100644 --- a/cmd/monwork/main.go +++ b/cmd/monwork/main.go @@ -226,13 +226,13 @@ var ( where c.last_refresh < c.updated or c.last_refresh is null limit 1 for update of c skip locked;` - SQLRefreshActiveCheck = `insert into active_checks(check_id, cmdline, intval, enabled, msg, mapping_id) -select c.id, $2, c.intval, c.enabled, case when ac.msg is null then '' else ac.msg end, case when c.mapping_id is not null then c.mapping_id when n.mapping_id is not null then n.mapping_id else 1 end + SQLRefreshActiveCheck = `insert into active_checks(check_id, cmdline, intval, enabled, msg, mapping_id, checker_id) +select c.id, $2, c.intval, c.enabled, case when ac.msg is null then '' else ac.msg end, case when c.mapping_id is not null then c.mapping_id when n.mapping_id is not null then n.mapping_id else 1 end, c.checker_id from checks c left join active_checks ac on c.id = ac.check_id left join nodes n on c.node_id = n.id where c.id = $1 on conflict(check_id) -do update set cmdline = $2, intval = excluded.intval, enabled = excluded.enabled, mapping_id = excluded.mapping_id;` +do update set cmdline = $2, intval = excluded.intval, enabled = excluded.enabled, mapping_id = excluded.mapping_id, checker_id = excluded.checker_id;` SQLUpdateLastRefresh = `update checks set last_refresh = now() where id = $1;` ) diff --git a/moncheck.conf.example b/moncheck.conf.example index 6d8a69a..29f5d81 100644 --- a/moncheck.conf.example +++ b/moncheck.conf.example @@ -1,5 +1,6 @@ { "db": "user=moncheck dbname=monzero", + "checker_id": 1, "timeout": "5s", "wait": "5s", "path": [