view pkg/controllers/manualimports.go @ 5490:5f47eeea988d logging

Use own logging package.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Mon, 20 Sep 2021 17:45:39 +0200
parents 4394daeea96a
children 6270951dda28
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>
//  * Raimund Renkert <raimund.renkert@intevation.de>

package controllers

import (
	"net/http"
	"time"

	"github.com/gorilla/mux"

	"gemma.intevation.de/gemma/pkg/auth"
	"gemma.intevation.de/gemma/pkg/common"
	"gemma.intevation.de/gemma/pkg/imports"
	"gemma.intevation.de/gemma/pkg/log"
	"gemma.intevation.de/gemma/pkg/models"

	mw "gemma.intevation.de/gemma/pkg/middleware"
)

func importModel(req *http.Request) interface{} {
	kind := mux.Vars(req)["kind"]
	ctor := imports.ImportModelForJobKind(imports.JobKind(kind))
	if ctor == nil {
		log.Errorf("unknown job kind '%s'.\n", kind)
		panic(http.ErrAbortHandler)
	}
	return ctor()
}

func manualImport(req *http.Request) (jr mw.JSONResult, err error) {

	kind := imports.JobKind(mux.Vars(req)["kind"])
	input := mw.JSONInput(req)
	what := imports.ConvertToInternal(kind, input)
	if what == nil {
		err = mw.JSONError{
			Code:    http.StatusInternalServerError,
			Message: "Unable to convert import models",
		}
		return
	}

	var serialized string
	if serialized, err = common.ToJSONString(what); err != nil {
		return
	}

	var (
		due       time.Time
		trys      *int
		waitRetry *time.Duration
		email     bool
	)

	if qctg, ok := input.(models.QueueConfigurationGetter); ok {
		qct := qctg.GetQueueConfiguration()
		if qct.Due != nil {
			due = qct.Due.Time
		}
		trys = qct.Trys
		if qct.WaitRetry != nil {
			waitRetry = &qct.WaitRetry.Duration
		}
	}

	if etg, ok := input.(models.EmailTypeGetter); ok {
		email = etg.GetEmailType().Email
	}

	session, _ := auth.GetSession(req)

	var jobID int64
	if jobID, err = imports.AddJob(
		kind,
		due,
		trys,
		waitRetry,
		session.User,
		email,
		serialized,
	); err != nil {
		return
	}

	log.Infof("added import #%d to queue\n", jobID)

	result := struct {
		ID int64 `json:"id"`
	}{
		ID: jobID,
	}

	jr = mw.JSONResult{
		Code:   http.StatusCreated,
		Result: &result,
	}
	return
}