Mercurial > gemma
view pkg/scheduler/boot.go @ 2549:9bf6b767a56a
client: refactored and improved splitscreen for diagrams
To make different diagrams possible, the splitscreen view needed to be decoupled from the cross profiles.
Also the style has changed to make it more consistent with the rest of the app. The standard box header
is now used and there are collapse and expand animations.
author | Markus Kottlaender <markus@intevation.de> |
---|---|
date | Fri, 08 Mar 2019 08:50:47 +0100 |
parents | 6594903a14e8 |
children | 6691bf76af1c |
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, username, a.v FROM import.import_configuration c JOIN import.import_configuration_attributes a ON c.id = a.import_configuration_id WHERE c.id IN ( SELECT import_configuration_id FROM import.import_configuration_attributes WHERE k = 'cron')` 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 }