Mercurial > gemma
view pkg/controllers/uploadedimports.go @ 2295:b6cd295bf75d
import_schedule: default for sort-by: 'hydro_scamin'
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Mon, 18 Feb 2019 11:16:13 +0100 |
parents | 0d272d7bcfb9 |
children | 0a3debcfbe8f |
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 controllers import ( "log" "net/http" "time" "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/common" "gemma.intevation.de/gemma/pkg/imports" "gemma.intevation.de/gemma/pkg/misc" ) const maxUploadSize = 25 * 1024 * 1024 func importApprovedGaugeMeasurements() http.HandlerFunc { return uploadedImport( imports.AGMJobKind, "agm.csv", func(dir string) imports.Job { return &imports.ApprovedGaugeMeasurements{Dir: dir} }, ) } func importUploadedBottleneck() http.HandlerFunc { return uploadedImport( imports.UBNJobKind, "data.xml", func(dir string) imports.Job { return &imports.UploadedBottleneck{Dir: dir} }, ) } func importUploadedFairwayAvailability() http.HandlerFunc { return uploadedImport( imports.UFAJobKind, "data.xml", func(dir string) imports.Job { return &imports.UploadedFairwayAvailability{Dir: dir} }, ) } func importUploadedGaugeMeasurement() http.HandlerFunc { return uploadedImport( imports.UGMJobKind, "data.xml", func(dir string) imports.Job { return &imports.UploadedGaugeMeasurement{Dir: dir} }, ) } func uploadedImport( kind imports.JobKind, fname string, create func(string) imports.Job, ) http.HandlerFunc { return func(rw http.ResponseWriter, req *http.Request) { dir, err := misc.StoreUploadedFile( req, string(kind), fname, maxUploadSize) if err != nil { log.Printf("error: %v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } job := create(dir) serialized, err := common.ToJSONString(job) if err != nil { log.Printf("error: %v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } session, _ := auth.GetSession(req) sendEmail := req.FormValue("email") != "" jobID, err := imports.AddJob( kind, time.Time{}, // due nil, // trys nil, // retry wait session.User, sendEmail, serialized) if err != nil { log.Printf("error: %v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } log.Printf("info: added import #%d to queue\n", jobID) result := struct { ID int64 `json:"id"` }{ ID: jobID, } SendJSON(rw, http.StatusCreated, &result) } }