github.com/Axway/agent-sdk@v1.1.101/pkg/compliance/manager.go (about)

     1  package compliance
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/Axway/agent-sdk/pkg/jobs"
     7  	"github.com/Axway/agent-sdk/pkg/util/log"
     8  )
     9  
    10  type Manager interface {
    11  	RegisterRuntimeComplianceJob(interval time.Duration, processor Processor)
    12  	Trigger()
    13  }
    14  
    15  type complianceManager struct {
    16  	logger log.FieldLogger
    17  	job    *runtimeComplianceJob
    18  }
    19  
    20  var manager Manager
    21  
    22  func GetManager() Manager {
    23  	if manager == nil {
    24  		cm := &complianceManager{
    25  			logger: log.NewFieldLogger().WithComponent("compliance"),
    26  		}
    27  		manager = cm
    28  	}
    29  	return manager
    30  }
    31  
    32  func (m *complianceManager) Trigger() {
    33  	if m.job != nil {
    34  		m.job.Execute()
    35  	}
    36  }
    37  
    38  func (m *complianceManager) RegisterRuntimeComplianceJob(interval time.Duration, processor Processor) {
    39  	if m.job != nil {
    40  		jobs.UnregisterJob(m.job.id)
    41  	}
    42  
    43  	job := &runtimeComplianceJob{
    44  		logger:    m.logger,
    45  		processor: processor,
    46  	}
    47  	id, err := jobs.RegisterIntervalJobWithName(job, interval, "Runtime compliance")
    48  	if err != nil {
    49  		m.logger.WithError(err).Error("failed to register runtime compliance job")
    50  	}
    51  	job.id = id
    52  	m.job = job
    53  }