Reading json arguments for task running, setup_bootnode task, don't run actual commands for dev release

loop_loop_execution
Paulo Truta 2021-02-14 01:04:50 +01:00
parent c3d283c243
commit db3b31091e
1 changed files with 80 additions and 11 deletions

View File

@ -2,12 +2,23 @@ package tasks
import ( import (
"database/sql" "database/sql"
"encoding/json"
"fmt" "fmt"
"os/exec"
"strconv" "strconv"
_ "github.com/go-sql-driver/mysql" // Mysql Driver _ "github.com/go-sql-driver/mysql" // Mysql Driver
) )
// Version : The release version
var Version string
// Commit : The commit of this release
var Commit string
// BuildDate : The release build date
var BuildDate string
// Dbhost : Database host (can be tweaked in makefile) // Dbhost : Database host (can be tweaked in makefile)
var Dbhost string var Dbhost string
@ -31,6 +42,12 @@ type Task struct {
Updated string `json:"updated"` Updated string `json:"updated"`
} }
type taskSetupBootnodeArgs struct {
BootnodeAddress string `json:"bootnode_address"`
BootnodeToken string `json:"bootnode_token"`
AssignedAddress string `json:"assigned_address"`
}
// GetNextTask : Performs a MySQL query over the device's Edgebox API // GetNextTask : Performs a MySQL query over the device's Edgebox API
func GetNextTask() Task { func GetNextTask() Task {
@ -92,18 +109,31 @@ func ExecuteTask(task Task) Task {
} }
if Version == "dev" {
fmt.Println("Dev environemnt. Not executing tasks.")
} else {
switch task.Task { switch task.Task {
case "setup_bootnode": case "setup_bootnode":
fmt.Println("Setting up bootnode connection...") fmt.Println("Setting up bootnode connection...")
// ... var args taskSetupBootnodeArgs
task.Result = sql.NullString{String: "{status: 'success'}", Valid: true} err := json.Unmarshal([]byte(task.Args), &args)
if err != nil {
fmt.Println("Error reading arguments of setup_bootnode task: %s", err)
} else {
task.Result = sql.NullString{String: taskSetupBootnode(args), Valid: true}
}
case "start_edgeapp": case "start_edgeapp":
fmt.Println("Starting EdgeApp...") fmt.Println("Starting EdgeApp...")
task.Result = sql.NullString{String: taskStartEdgeApp(), Valid: true}
// ... // ...
case "stop_edgeapp": case "stop_edgeapp":
fmt.Println("Stopping EdgeApp...") fmt.Println("Stopping EdgeApp...")
task.Result = sql.NullString{String: taskStopEdgeApp(), Valid: true}
// ... // ...
} }
}
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) + ";")
@ -120,3 +150,42 @@ func ExecuteTask(task Task) Task {
return returnTask return returnTask
} }
// Internal functions, for each task
func taskSetupBootnode(args taskSetupBootnodeArgs) string {
out, err := exec.Command("tinc-boot", "gen", "--token "+args.BootnodeToken, args.BootnodeAddress+":8655", "--prefix "+args.AssignedAddress).Output()
if err != nil {
fmt.Printf("%s", err)
}
output := string(out[:])
fmt.Println(output)
out, err = exec.Command("systemctl", "start", "tinc@dnet").Output()
if err != nil {
fmt.Printf("%s", err)
}
output = string(out[:])
fmt.Println(output)
out, err = exec.Command("systemctl", "enable", "tinc@dnet").Output()
if err != nil {
fmt.Printf("%s", err)
}
output = string(out[:])
fmt.Println(output)
return output
}
func taskStartEdgeApp() string {
return "OK"
}
func taskStopEdgeApp() string {
return "OK"
}