github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/actionpruner/worker.go (about)

     1  // Copyright 2017 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package actionpruner
     5  
     6  import (
     7  	"time"
     8  
     9  	"github.com/juju/errors"
    10  	"gopkg.in/juju/worker.v1"
    11  	"gopkg.in/juju/worker.v1/catacomb"
    12  
    13  	"github.com/juju/juju/api/action"
    14  	"github.com/juju/juju/api/base"
    15  	"github.com/juju/juju/environs/config"
    16  	"github.com/juju/juju/worker/pruner"
    17  )
    18  
    19  // Worker prunes status history records at regular intervals.
    20  type Worker struct {
    21  	pruner.PrunerWorker
    22  }
    23  
    24  func NewFacade(caller base.APICaller) pruner.Facade {
    25  	return action.NewFacade(caller)
    26  }
    27  
    28  func (w *Worker) loop() error {
    29  	return w.Work(func(config *config.Config) (time.Duration, uint) {
    30  		return config.MaxActionResultsAge(), config.MaxActionResultsSizeMB()
    31  	})
    32  }
    33  
    34  // New creates a new action pruner worker
    35  func New(conf pruner.Config) (worker.Worker, error) {
    36  	if err := conf.Validate(); err != nil {
    37  		return nil, errors.Trace(err)
    38  	}
    39  
    40  	w := &Worker{
    41  		pruner.New(conf),
    42  	}
    43  
    44  	err := catacomb.Invoke(catacomb.Plan{
    45  		Site: w.Catacomb(),
    46  		Work: w.loop,
    47  	})
    48  
    49  	return w, errors.Trace(err)
    50  }