Introduced tick counter and ExecuteSchedules for execution of recurrent no argument tasks

loop_loop_execution
Paulo Truta 2021-02-15 18:14:46 +00:00
parent 50ad33ac33
commit 9f20211bf4
2 changed files with 42 additions and 3 deletions

View File

@ -59,10 +59,13 @@ func main() {
printDbDetails() printDbDetails()
tick := 0
// infinite loop // infinite loop
for { for {
systemIterator(name) tick++ // Tick is an int, so eventually will "go out of ticks?" Maybe we want to reset the ticks every once in a while, to avoid working with big numbers...
systemIterator(name, tick)
} }
@ -98,13 +101,16 @@ func isDatabaseReady() bool {
return false return false
} }
func systemIterator(name *string) { func systemIterator(name *string, tick int) {
log.Printf("Tick is %d", tick)
if isSystemReady() { if isSystemReady() {
// Wait about 60 seconds before trying again. // Wait about 60 seconds before trying again.
log.Printf("System not ready. Next try will be executed in 60 seconds") log.Printf("System not ready. Next try will be executed in 60 seconds")
time.Sleep(defaultNotReadySleepTime) time.Sleep(defaultNotReadySleepTime)
} else { } else {
tasks.ExecuteSchedules(tick)
// Wait about 1 second before resumming operations. // Wait about 1 second before resumming operations.
log.Printf("Next instruction will be executed 1 second") log.Printf("Next instruction will be executed 1 second")
time.Sleep(defaultSleepTime) time.Sleep(defaultSleepTime)

View File

@ -143,7 +143,7 @@ func ExecuteTask(task Task) Task {
if task.Result.Valid { if task.Result.Valid {
db.Query("Update tasks SET status = 2, result = '" + task.Result.String + "' WHERE ID = " + strconv.Itoa(task.ID) + ";") db.Query("Update tasks SET status = 2, result = '" + task.Result.String + "' WHERE ID = " + strconv.Itoa(task.ID) + ";")
} else { } else {
db.Query("Update tasks SET status = 2, result = 'Invalid Task' WHERE ID = " + strconv.Itoa(task.ID) + ";") db.Query("Update tasks SET status = 3, result = 'Error' WHERE ID = " + strconv.Itoa(task.ID) + ";")
} }
if err != nil { if err != nil {
@ -156,6 +156,24 @@ func ExecuteTask(task Task) Task {
} }
// ExecuteSchedules - Run Specific tasks without input each multiple x of ticks.
func ExecuteSchedules(tick int) {
if tick%30 == 0 {
// Executing every 30 ticks
taskGetEdgeApps()
}
if tick%60 == 0 {
// Every 60 ticks...
}
// Just add a schedule here if you need a custom one (every "tick hour", every "tick day", etc...)
}
func executeCommand(command string, args []string) string { func executeCommand(command string, args []string) string {
cmd := exec.Command(command, args...) cmd := exec.Command(command, args...)
var out bytes.Buffer var out bytes.Buffer
@ -189,6 +207,21 @@ func taskSetupTunnel(args taskSetupTunnelArgs) string {
} }
func taskGetEdgeApps() string {
fmt.Println("Executing taskGetEdgeApps")
// Building list of available edgeapps in the system.
// Querying to see which apps are running.
// cmdargs = []string{"ps", "-a"}
// executeCommand("docker", cmdargs)
// (...)
// Saving information in the "options" table.
return "OK"
}
func taskStartEdgeApp() string { func taskStartEdgeApp() string {
return "OK" return "OK"