github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/worker/toolsversionchecker/worker.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package toolsversionchecker
     5  
     6  import (
     7  	"time"
     8  
     9  	"github.com/juju/errors"
    10  	"github.com/juju/loggo"
    11  
    12  	"github.com/juju/juju/worker"
    13  )
    14  
    15  var logger = loggo.GetLogger("juju.worker.networktoolsversionchecker")
    16  
    17  // VersionCheckerParams holds params for the version checker worker..
    18  type VersionCheckerParams struct {
    19  	CheckInterval time.Duration
    20  }
    21  
    22  type Facade interface {
    23  	UpdateToolsVersion() error
    24  }
    25  
    26  // New returns a worker that periodically wakes up to try to find out and
    27  // record the latest version of the tools so the update possibility can be
    28  // displayed to the users on status.
    29  func New(api Facade, params *VersionCheckerParams) worker.Worker {
    30  	w := &toolsVersionWorker{
    31  		api:    api,
    32  		params: params,
    33  	}
    34  
    35  	f := func(stop <-chan struct{}) error {
    36  		return w.doCheck()
    37  	}
    38  	return worker.NewPeriodicWorker(f, params.CheckInterval, worker.NewTimer)
    39  }
    40  
    41  type toolsVersionWorker struct {
    42  	api    Facade
    43  	params *VersionCheckerParams
    44  }
    45  
    46  func (w *toolsVersionWorker) doCheck() error {
    47  	err := w.api.UpdateToolsVersion()
    48  	return errors.Annotate(err, "cannot update tools information")
    49  }