view pkg/models/importbase.go @ 2029:8d006afa7c1b unify_imports

Imports: Stretch imports are not configurabel and scheduable.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 25 Jan 2019 09:55:56 +0100
parents 070ac9dd61a1
children 83108e90b223
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 models

import (
	"encoding/json"
	"time"

	"github.com/robfig/cron"
)

type (
	// CronSpec is a string containing a cron line.
	CronSpec string

	EmailType struct {
		Email bool `json:"send-email,omitempty"`
	}

	QueueConfigurationType struct {
		EmailType
		Trys      *int           `json:"trys,omitempty"`
		WaitRetry *time.Duration `json:"wait-retry,omitempty"`
		Due       *time.Time     `json:"due,omitempty"`
		Cron      *CronSpec      `json:"cron,omitempty"`
	}

	URLType struct {
		URL      string  `json:"url"`
		Insecure bool    `json:"insecure,omitempty"`
		User     *string `json:"user,omitempty"`
		Password *string `json:"password,omitempty"`
	}

	EmailTypeGetter interface {
		GetEmailType() *EmailType
	}

	QueueConfigurationGetter interface {
		GetQueueConfiguration() *QueueConfigurationType
	}

	URLTypeGetter interface {
		GetURLType() *URLType
	}
)

func (qct *QueueConfigurationType) GetQueueConfiguration() *QueueConfigurationType {
	return qct
}

func (ut *URLType) GetURLType() *URLType {
	return ut
}

// UnmarshalJSON checks if the incoming string is a valid cron line.
func (cs *CronSpec) UnmarshalJSON(data []byte) error {
	var spec string
	if err := json.Unmarshal(data, &spec); err != nil {
		return err
	}
	if _, err := cron.Parse(spec); err != nil {
		return err
	}
	*cs = CronSpec(spec)
	return nil
}