parent
							
								
									6ccd4a3299
								
							
						
					
					
						commit
						a8b1da4b7c
					
				|  | @ -425,3 +425,94 @@ func CopyFile(src string, dest string) error { | |||
|     return nil | ||||
| } | ||||
| 
 | ||||
| func CheckUpdates() { | ||||
| 	fmt.Println("Checking for Edgebox System Updates.") | ||||
| 	 | ||||
| 	// Configure the service and start it
 | ||||
| 	cmd := exec.Command("sh", "/home/system/components/updater/run.sh", "--check") | ||||
| 	stdout, err := cmd.StdoutPipe() | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	scanner := bufio.NewScanner(stdout) | ||||
| 	err = cmd.Start() | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	for scanner.Scan() { | ||||
| 		// fmt.Println(scanner.Text())
 | ||||
| 		text := scanner.Text() | ||||
| 		fmt.Println(text) | ||||
| 	} | ||||
| 	if scanner.Err() != nil { | ||||
| 		cmd.Process.Kill() | ||||
| 		cmd.Wait() | ||||
| 		fmt.Println("Error running updates check.") | ||||
| 		utils.WriteOption("SYSTEM_UPDATES", "[]") | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	// Read targets.env file into JSON list structure
 | ||||
| 	targets := []string{} | ||||
| 	targetsFile, err := os.Open("/home/system/components/updater/targets.env") | ||||
| 	if err != nil { | ||||
| 		fmt.Println("No targets.env file found. Skipping.") | ||||
| 		utils.WriteOption("SYSTEM_UPDATES", "[]") | ||||
| 		return | ||||
| 	} | ||||
| 	defer targetsFile.Close() | ||||
| 	scanner = bufio.NewScanner(targetsFile) | ||||
| 	for scanner.Scan() { | ||||
| 		text := scanner.Text() | ||||
| 		// text line should look like: {"target": "<target>", "version": "<version>"}
 | ||||
| 		target := strings.Split(text, "=") | ||||
| 		newText := "{\"target\": \"" + strings.Replace(target[0], "_VERSION", "", -1) + "\", \"version\": \"" + target[1] + "\"}" | ||||
| 		targets = append(targets, newText) | ||||
| 	} | ||||
| 	if scanner.Err() != nil { | ||||
| 		fmt.Println("Error reading update targets file.") | ||||
| 		utils.WriteOption("SYSTEM_UPDATES", "[]") | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	// convert targets to string
 | ||||
| 	targetsString := strings.Join(targets, ",") | ||||
| 	targetsString = "[" + targetsString + "]" | ||||
| 
 | ||||
| 	fmt.Println(targetsString) | ||||
| 
 | ||||
| 	// Write option with targets
 | ||||
| 	utils.WriteOption("SYSTEM_UPDATES", targetsString) | ||||
| } | ||||
| 
 | ||||
| func ApplyUpdates() { | ||||
| 	fmt.Println("Applying Edgebox System Updates.") | ||||
| 
 | ||||
| 	utils.WriteOption("UPDATING_SYSTEM", "true") | ||||
| 	 | ||||
| 	// Configure the service and start it
 | ||||
| 	cmd := exec.Command("sh", "/home/system/components/updater/run.sh", "--update") | ||||
| 	stdout, err := cmd.StdoutPipe() | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	scanner := bufio.NewScanner(stdout) | ||||
| 	err = cmd.Start() | ||||
| 	if err != nil { | ||||
| 		panic(err) | ||||
| 	} | ||||
| 	for scanner.Scan() { | ||||
| 		fmt.Println(scanner.Text()) | ||||
| 		text := scanner.Text() | ||||
| 		fmt.Println(text) | ||||
| 	} | ||||
| 	if scanner.Err() != nil { | ||||
| 		cmd.Process.Kill() | ||||
| 		cmd.Wait() | ||||
| 		panic(scanner.Err()) | ||||
| 	} | ||||
| 
 | ||||
| 	// If the system did not yet restart, set updating system to false
 | ||||
| 	utils.WriteOption("UPDATING_SYSTEM", "false") | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -146,6 +146,33 @@ func GetNextTask() Task { | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| // GetExecutingTasks : Performs a MySQL query over the device's Edgebox API to obtain all tasks that are currently executing
 | ||||
| func GetExecutingTasks() []Task { | ||||
| 	// Will try to connect to API database, which should be running locally under WS.
 | ||||
| 	db, err := sql.Open("sqlite3", utils.GetSQLiteDbConnectionDetails()) | ||||
| 	if err != nil { | ||||
| 		panic(err.Error()) | ||||
| 	} | ||||
| 	results, err := db.Query("SELECT id, task, args, status, result, created, updated FROM task WHERE status = 1;") | ||||
| 	if err != nil { | ||||
| 		panic(err.Error()) | ||||
| 	} | ||||
| 
 | ||||
| 	var tasks []Task | ||||
| 	for results.Next() { | ||||
| 		// for each row, scan the result into our task composite object
 | ||||
| 		var task Task | ||||
| 		err = results.Scan(&task.ID, &task.Task, &task.Args, &task.Status, &task.Result, &task.Created, &task.Updated) | ||||
| 		if err != nil { | ||||
| 			panic(err.Error()) // proper error handling instead of panic in your app
 | ||||
| 		} | ||||
| 		tasks = append(tasks, task) | ||||
| 	} | ||||
| 	results.Close() | ||||
| 	db.Close() | ||||
| 	return tasks | ||||
| } | ||||
| 
 | ||||
| // ExecuteTask : Performs execution of the given task, updating the task status as it goes, and publishing the task result
 | ||||
| func ExecuteTask(task Task) Task { | ||||
| 
 | ||||
|  | @ -387,6 +414,25 @@ func ExecuteTask(task Task) Task { | |||
| 			taskResult := taskDisablePublicDashboard() | ||||
| 			task.Result = sql.NullString{String: taskResult, Valid: true} | ||||
| 
 | ||||
| 		case "check_updates": | ||||
| 			log.Println("Checking for updates...") | ||||
| 			taskResult := taskCheckSystemUpdates() | ||||
| 			task.Result = sql.NullString{String: taskResult, Valid: true} | ||||
| 
 | ||||
| 		case "apply_updates": | ||||
| 
 | ||||
| 			log.Println("Updating Edgebox System...") | ||||
| 			is_updating := utils.ReadOption("UPDATING_SYSTEM") | ||||
| 			if is_updating == "true"  { | ||||
| 				log.Println("Edgebox update was running... Probably system restarted. Finishing update...") | ||||
| 				utils.WriteOption("UPDATING_SYSTEM", "false") | ||||
| 				task.Result = sql.NullString{String: "{result: true}", Valid: true} | ||||
| 			} else { | ||||
| 				log.Println("Updating Edgebox System...") | ||||
| 				taskResult := taskUpdateSystem() | ||||
| 				task.Result = sql.NullString{String: taskResult, Valid: true} | ||||
| 			} | ||||
| 
 | ||||
| 		} | ||||
| 
 | ||||
| 	} | ||||
|  | @ -407,6 +453,7 @@ func ExecuteTask(task Task) Task { | |||
| 		if err != nil { | ||||
| 			log.Fatal(err.Error()) | ||||
| 		} | ||||
| 
 | ||||
| 	} else { | ||||
| 		fmt.Println("Error executing task with result: " + task.Result.String) | ||||
| 		_, err = statement.Exec(STATUS_ERROR, "Error", formatedDatetime, strconv.Itoa(task.ID)) // Execute SQL Statement with Error info
 | ||||
|  | @ -460,6 +507,9 @@ func ExecuteSchedules(tick int) { | |||
| 		taskStartWs() | ||||
| 		log.Println(taskGetEdgeApps()) | ||||
| 		taskUpdateSystemLoggerServices() | ||||
| 		taskRecoverFromUpdate() | ||||
| 		taskCheckSystemUpdates() | ||||
| 		 | ||||
| 	} | ||||
| 
 | ||||
| 	if tick%5 == 0 { | ||||
|  | @ -506,6 +556,7 @@ func ExecuteSchedules(tick int) { | |||
| 
 | ||||
| 	if tick%3600 == 0 { | ||||
| 		// Executing every 3600 ticks (1 hour)
 | ||||
| 		taskCheckSystemUpdates() | ||||
| 	} | ||||
| 
 | ||||
| 	if tick%86400 == 0 { | ||||
|  | @ -1230,6 +1281,38 @@ func taskDisablePublicDashboard() string { | |||
| 	return "{result: false}" | ||||
| } | ||||
| 
 | ||||
| func taskCheckSystemUpdates() string { | ||||
| 	fmt.Println("Executing taskCheckSystemUpdates") | ||||
| 	system.CheckUpdates() | ||||
| 	return "{result: true}" | ||||
| } | ||||
| 
 | ||||
| func taskUpdateSystem() string { | ||||
| 	fmt.Println("Executing taskUpdateSystem") | ||||
| 	system.ApplyUpdates() | ||||
| 	return "{result: true}" | ||||
| } | ||||
| 
 | ||||
| func taskRecoverFromUpdate() string { | ||||
| 	fmt.Println("Executing taskRecoverFromUpdate") | ||||
| 	executing_tasks := GetExecutingTasks() | ||||
| 	// Filter out the task with task value "update_system"
 | ||||
| 	filteredTasks := []Task{} | ||||
| 	for _, task := range executing_tasks { | ||||
| 		if task.Task != "update_system" { | ||||
| 			filteredTasks = append(filteredTasks, task) | ||||
| 		} | ||||
| 	} | ||||
| 	 | ||||
| 	// If tasks is not empty, Get the last task
 | ||||
| 	if len(filteredTasks) > 0 { | ||||
| 		lastTask := filteredTasks[len(filteredTasks)-1] | ||||
| 		ExecuteTask(lastTask) | ||||
| 	} | ||||
| 
 | ||||
| 	return "{result: true}" | ||||
| } | ||||
| 
 | ||||
| func taskSetReleaseVersion() string { | ||||
| 
 | ||||
| 	fmt.Println("Executing taskSetReleaseVersion") | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue