Mercurial > gemma
view pkg/scheduler/boot.go @ 4505:30c499f996d7
Simplified code.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 02 Oct 2019 16:00:42 +0200 |
parents | 6691bf76af1c |
children | 5f47eeea988d |
line wrap: on
line source
// This is Free Software under GNU Affero General Public License v >= 3.0 // without warranty, see README.md and license for details. // // SPDX-License-Identifier: AGPL-3.0-or-later // License-Filename: LICENSES/AGPL-3.0.txt // // Copyright (C) 2018 by via donau // – Österreichische Wasserstraßen-Gesellschaft mbH // Software engineering by Intevation GmbH // // Author(s): // * Sascha L. Teichmann <sascha.teichmann@intevation.de> package scheduler import ( "context" "database/sql" "log" "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/config" ) const ( bootRole = "sys_admin" selectImportConfSQL = ` SELECT c.id, c.kind, a.v FROM import.import_configuration c JOIN import.import_configuration_attributes a ON c.id = a.import_configuration_id WHERE a.k = 'cron' AND a.v IS NOT NULL AND a.v <> '' ` scheduledIDsSQL = ` SELECT id FROM import.import_configuration WHERE username = $1 AND id IN ( SELECT import_configuration_id FROM import.import_configuration_attributes WHERE k = 'cron')` ) func init() { go boot() } // boot starts the scheduler with the configurations from // the database which have a schedule. func boot() { config.WaitReady() log.Println("info: booting scheduler from database.") ctx := context.Background() err := auth.RunAs( ctx, bootRole, func(conn *sql.Conn) error { rows, err := conn.QueryContext(ctx, selectImportConfSQL) if err != nil { return err } defer rows.Close() err = BootActions(func(ba *BoundAction) (bool, error) { if err != nil { return false, err } if !rows.Next() { return false, nil } var id int64 if err = rows.Scan( &id, &ba.Name, &ba.Spec, ); err != nil { return false, err } ba.CfgID = id return true, nil }) if err != nil { return err } return rows.Err() }) if err != nil { log.Printf("error: %v\n", err) } } // ScheduledUserIDs returns the IDs with a schedule for a given user. func ScheduledUserIDs( ctx context.Context, conn *sql.Conn, user string, ) (map[int64]struct{}, error) { ids := map[int64]struct{}{} rows, err := conn.QueryContext(ctx, scheduledIDsSQL, user) if err != nil { return nil, nil } defer rows.Close() for rows.Next() { var id int64 if err := rows.Scan(&id); err != nil { return nil, err } ids[id] = struct{}{} } if err := rows.Err(); err != nil { return nil, err } return ids, nil }