mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-05-02 00:44:53 -05:00
better configuration for pp service
Signed-off-by: jkoberg <jkoberg@owncloud.com>
This commit is contained in:
@@ -23,6 +23,7 @@ type Config struct {
|
||||
// Postprocessing definces the config options for the postprocessing service.
|
||||
type Postprocessing struct {
|
||||
Events Events `yaml:"events"`
|
||||
Steps []string `yaml:"steps" env:"POSTPROCESSING_STEPS" desc:"A comma seperated list of postprocessing steps. Known to the system are virusscan and delay. Custom steps are allowed. See README.md for instructions."`
|
||||
Virusscan bool `yaml:"virusscan" env:"POSTPROCESSING_VIRUSSCAN" desc:"After uploading a file but before making it available for download, virus scanning the file can be enabled. Needs as prerequisite the antivirus service to be enabled and configured."`
|
||||
Delayprocessing time.Duration `yaml:"delayprocessing" env:"POSTPROCESSING_DELAY" desc:"After uploading a file but before making it available for download, a delay step can be added. Intended for developing purposes only. The duration can be set as number followed by a unit identifier like s, m or h."`
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import (
|
||||
user "github.com/cs3org/go-cs3apis/cs3/identity/user/v1beta1"
|
||||
provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1"
|
||||
"github.com/cs3org/reva/v2/pkg/events"
|
||||
"github.com/owncloud/ocis/v2/services/postprocessing/pkg/config"
|
||||
)
|
||||
|
||||
// Postprocessing handles postprocessing of a file
|
||||
@@ -18,22 +17,22 @@ type Postprocessing struct {
|
||||
filename string
|
||||
filesize uint64
|
||||
resourceID *provider.ResourceId
|
||||
c config.Postprocessing
|
||||
steps []events.Postprocessingstep
|
||||
delay time.Duration
|
||||
}
|
||||
|
||||
// New returns a new postprocessing instance
|
||||
func New(uploadID string, uploadURL string, user *user.User, filename string, filesize uint64, resourceID *provider.ResourceId, c config.Postprocessing) *Postprocessing {
|
||||
func New(uploadID string, uploadURL string, user *user.User, filename string, filesize uint64, resourceID *provider.ResourceId, steps []events.Postprocessingstep, delay time.Duration) *Postprocessing {
|
||||
return &Postprocessing{
|
||||
id: uploadID,
|
||||
url: uploadURL,
|
||||
u: user,
|
||||
m: make(map[events.Postprocessingstep]interface{}),
|
||||
c: c,
|
||||
filename: filename,
|
||||
filesize: filesize,
|
||||
resourceID: resourceID,
|
||||
steps: getSteps(c),
|
||||
steps: steps,
|
||||
delay: delay,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,7 +63,7 @@ func (pp *Postprocessing) Virusscan(ev events.VirusscanFinished) interface{} {
|
||||
// Delay will sleep the configured time then continue
|
||||
func (pp *Postprocessing) Delay(ev events.StartPostprocessingStep) interface{} {
|
||||
pp.m[events.PPStepDelay] = ev
|
||||
time.Sleep(pp.c.Delayprocessing)
|
||||
time.Sleep(pp.delay)
|
||||
return pp.next(events.PPStepDelay)
|
||||
}
|
||||
|
||||
@@ -99,20 +98,3 @@ func (pp *Postprocessing) finished(outcome events.PostprocessingOutcome) events.
|
||||
Outcome: outcome,
|
||||
}
|
||||
}
|
||||
|
||||
func getSteps(c config.Postprocessing) []events.Postprocessingstep {
|
||||
// NOTE: first version only contains very basic configuration options
|
||||
// But we aim for a system where postprocessing steps and their order can be configured per space
|
||||
// ideally by the spaceadmin itself
|
||||
// We need to iterate over configuring PP service when we see fit
|
||||
var steps []events.Postprocessingstep
|
||||
if c.Delayprocessing != 0 {
|
||||
steps = append(steps, events.PPStepDelay)
|
||||
}
|
||||
|
||||
if c.Virusscan {
|
||||
steps = append(steps, events.PPStepAntivirus)
|
||||
}
|
||||
|
||||
return steps
|
||||
}
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/cs3org/reva/v2/pkg/events"
|
||||
"github.com/owncloud/ocis/v2/ocis-pkg/log"
|
||||
"github.com/owncloud/ocis/v2/services/postprocessing/pkg/config"
|
||||
@@ -12,6 +15,7 @@ type PostprocessingService struct {
|
||||
log log.Logger
|
||||
events <-chan interface{}
|
||||
pub events.Publisher
|
||||
steps []events.Postprocessingstep
|
||||
c config.Postprocessing
|
||||
}
|
||||
|
||||
@@ -31,6 +35,7 @@ func NewPostprocessingService(stream events.Stream, logger log.Logger, c config.
|
||||
log: logger,
|
||||
events: evs,
|
||||
pub: stream,
|
||||
steps: getSteps(c),
|
||||
c: c,
|
||||
}, nil
|
||||
}
|
||||
@@ -42,7 +47,7 @@ func (pps *PostprocessingService) Run() error {
|
||||
var next interface{}
|
||||
switch ev := e.(type) {
|
||||
case events.BytesReceived:
|
||||
pp := postprocessing.New(ev.UploadID, ev.URL, ev.ExecutingUser, ev.Filename, ev.Filesize, ev.ResourceID, pps.c)
|
||||
pp := postprocessing.New(ev.UploadID, ev.URL, ev.ExecutingUser, ev.Filename, ev.Filesize, ev.ResourceID, pps.steps, pps.c.Delayprocessing)
|
||||
current[ev.UploadID] = pp
|
||||
next = pp.Init(ev)
|
||||
case events.VirusscanFinished:
|
||||
@@ -73,3 +78,49 @@ func (pps *PostprocessingService) Run() error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func getSteps(c config.Postprocessing) []events.Postprocessingstep {
|
||||
// NOTE: improved version only allows configuring order of postprocessing steps
|
||||
// But we aim for a system where postprocessing steps can be configured per space, ideally by the spaceadmin itself
|
||||
// We need to iterate over configuring PP service when we see fit
|
||||
var steps []events.Postprocessingstep
|
||||
for _, s := range c.Steps {
|
||||
steps = append(steps, events.Postprocessingstep(s))
|
||||
}
|
||||
|
||||
if c.Virusscan {
|
||||
if !contains(steps, events.PPStepAntivirus) {
|
||||
steps = append(steps, events.PPStepAntivirus)
|
||||
fmt.Printf("ATTENTION: POSTPROCESSING_VIRUSSCAN is deprecated. Use `POSTPROCESSING_STEPS=%v` in the future\n", join(steps))
|
||||
}
|
||||
}
|
||||
|
||||
if c.Delayprocessing != 0 {
|
||||
if !contains(steps, events.PPStepDelay) {
|
||||
if len(steps) > 0 {
|
||||
fmt.Printf("Added delay step to the list of postprocessing steps. NOTE: Use envvar `POSTPROCESSING_STEPS=%v` to suppress this message and choose the order of postprocessing steps.\n", join(append(steps, events.PPStepDelay)))
|
||||
}
|
||||
|
||||
steps = append(steps, events.PPStepDelay)
|
||||
}
|
||||
}
|
||||
|
||||
return steps
|
||||
}
|
||||
|
||||
func contains(all []events.Postprocessingstep, candidate events.Postprocessingstep) bool {
|
||||
for _, s := range all {
|
||||
if s == candidate {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func join(all []events.Postprocessingstep) string {
|
||||
var slice []string
|
||||
for _, s := range all {
|
||||
slice = append(slice, string(s))
|
||||
}
|
||||
return strings.Join(slice, ",")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user