Files
plane/monitor/lib/cron/cron.go
Henit Chobisa a93467b95b feat: Added Prime Monitor Go Service for monitoring, health check and feature flagging (#411)
* feat: added build meta data to monitor

* feat: added versioning to prime-monitor

* feat: added logger package for prime-monitor

* feat: implemented logging in cmd

* feat: implemented moduled monorepo architecture

* feat: added cron package for healthcheck

* feat: added constants and modules for healthcheck

* feat: added environment service getter method

* feat: added environment service parser for parsing the recieved keys

* feat: added environment service provider method

* feat: added retry based executer for the test methods

* feat: added http health check method and placeholders for redis & pg

* feat: added tests for healthcheck methods

* feat: added PerformHealthCheck Controller Method for execution of healthcheck controller

* feat: added healthcheck test file for testing the healthcheck

* feat: added healthcheck to work file

* feat: added readme for healthcheck package

* feat: created healthcheck register for prime scheduler

* feat: added cron command for running cron subpart of monitor

* feat: added prime schedule handler for cron

* feat: added start command for starting up prime scheduler

* feat: added build utility files for monitor

* fix: goreleaser builds

* feat: removed Redis method from healthcheck methods

* feat: added docker file for building prime-monitor

* feat: added flag for adding healthcheck duration for cron start

* chore: removed redis as a healthcheck method

* chore: modified actions to build monitor on branch build and docker images

* feat: added monitor service in docker compose caddy

* feat: added description for HealthCheckJob

* fix: status code issue for reachable and non reachable

* feat: added api package for connecting with prime api

* feat: modified cmd package to report healthcheck status to prime

* feat: added api types inside prime-monitor

* feat: added message field for meta while status reporting

* fix: modified constants for environment variables

* feat: added monitor readme

* fix: build-branch monitor content shift to build-branch-ee

* chore: added build args on release

* feat: remove version meta data from cli

* fix: docker file changed to fix the build to default

* fix: removed build flags from github branch build

* fix: moved cron start to root level start cmd

* fix: passed the recieved machine signature to api headers

* feat: optimised docker build for monitor
2024-06-20 12:14:46 +05:30

67 lines
1.5 KiB
Go

package prime_cron
import (
"sync"
"github.com/go-co-op/gocron/v2"
"github.com/google/uuid"
)
type PrimeLifeCycleHandler interface {
PreRun(uuid.UUID, string)
PostRunE(uuid.UUID, string, error)
PostRun(uuid.UUID, string)
}
type PrimeScheduler struct {
Scheduler gocron.Scheduler
Handler PrimeLifeCycleHandler
}
func NewPrimeScheduler(handler PrimeLifeCycleHandler) (*PrimeScheduler, error) {
// TODO: add a logger to scheduler
scheduler, err := gocron.NewScheduler()
if err != nil {
return nil, err
}
return &PrimeScheduler{
Scheduler: scheduler,
Handler: handler,
}, nil
}
// Lists all the jobs for the current scheduler
func (p *PrimeScheduler) GetJobs() []gocron.Job {
return p.Scheduler.Jobs()
}
// Create Job creates a new job for the PrimeScheduler
func (p *PrimeScheduler) RegisterJob(defination gocron.JobDefinition, task gocron.Task, options ...gocron.JobOption) (gocron.Job, error) {
options = append(options, gocron.WithEventListeners(
gocron.AfterJobRuns(p.Handler.PostRun),
gocron.BeforeJobRuns(p.Handler.PreRun),
gocron.AfterJobRunsWithError(p.Handler.PostRunE),
))
return p.Scheduler.NewJob(defination, task, options...)
}
// Add Job to the Prime Scheduler
func (p *PrimeScheduler) GetJobsWaiting() int {
return p.Scheduler.JobsWaitingInQueue()
}
func (p *PrimeScheduler) Start() {
p.Scheduler.Start()
}
func (p *PrimeScheduler) StartWithBlocker() {
var wg = sync.WaitGroup{}
wg.Add(1)
p.Scheduler.Start()
wg.Wait()
}
func (p *PrimeScheduler) Shutdown() error {
return p.Scheduler.Shutdown()
}