/
settings.go
154 lines (120 loc) · 3.6 KB
/
settings.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package main
import (
"encoding/json"
"fmt"
"log"
"os"
"path/filepath"
tasknet "spinedtp/tasknet"
"spinedtp/tasktypes"
"spinedtp/ui"
"spinedtp/util"
"github.com/kirsle/configdir"
"github.com/lithammer/shortuuid/v3"
)
type SpineSettings struct {
ServerPort uint
ListenAddress string
ClientID string
ConfigFolder string
TaskTypesFolder string
LogFolder string
DbFolder string
ShowUI bool
RouteOnly bool // In this case it acts as a router only, no tasks are executed
}
var AppSettings SpineSettings
func LoadDefaultSettings() {
AppSettings.ServerPort = 59143
AppSettings.ListenAddress = "127.0.0.1"
AppSettings.ClientID = shortuuid.New()
AppSettings.ShowUI = true
AppSettings.RouteOnly = false
configPath := configdir.LocalConfig("spinechain")
err := configdir.MakePath(configPath) // Ensure it exists.
if err != nil {
panic(err)
}
AppSettings.ConfigFolder = configPath
if _, err := os.Stat(AppSettings.ConfigFolder); os.IsNotExist(err) {
err := os.Mkdir(AppSettings.ConfigFolder, 0755)
if err != nil {
log.Fatal(err)
}
}
AppSettings.TaskTypesFolder = filepath.Join(AppSettings.ConfigFolder, "tasktypes")
if _, err := os.Stat(AppSettings.TaskTypesFolder); os.IsNotExist(err) {
err := os.Mkdir(AppSettings.TaskTypesFolder, 0755)
if err != nil {
log.Fatal(err)
}
}
appConfigDir := configdir.LocalCache("spinechain")
AppSettings.LogFolder = filepath.Join(appConfigDir, "logs")
AppSettings.DbFolder = filepath.Join(appConfigDir, "db")
if _, err := os.Stat(appConfigDir); os.IsNotExist(err) {
err := os.Mkdir(appConfigDir, 0755)
if err != nil {
log.Fatal(err)
}
}
if _, err := os.Stat(AppSettings.LogFolder); os.IsNotExist(err) {
err := os.Mkdir(AppSettings.LogFolder, 0755)
if err != nil {
log.Fatal(err)
}
}
if _, err := os.Stat(AppSettings.DbFolder); os.IsNotExist(err) {
err := os.Mkdir(AppSettings.DbFolder, 0755)
if err != nil {
log.Fatal(err)
}
}
tasktypes.Init(AppSettings.TaskTypesFolder)
tasknet.TasksToExecute = &tasktypes.TasksToExecute
}
func LoadSettings() string {
LoadDefaultSettings()
settings_file := filepath.Join(AppSettings.ConfigFolder, "settings.json")
fmt.Println("Loading settings from " + settings_file)
file, err := os.Open(settings_file)
if err != nil {
return settings_file
}
defer file.Close()
decoder := json.NewDecoder(file)
err = decoder.Decode(&AppSettings)
if err != nil {
fmt.Println("error:", err)
}
util.CreateLog(AppSettings.LogFolder)
return settings_file
}
func SaveSettings() {
file, err := os.Create(filepath.Join(AppSettings.ConfigFolder, "settings.json"))
if err != nil {
fmt.Println("Error while writing:", err)
return
}
jdata1, _ := json.MarshalIndent(AppSettings, "", " ")
file.Write(jdata1)
defer file.Close()
}
func SetNetworkSettings() {
tasknet.NetworkSettings.ServerHost = AppSettings.ListenAddress
tasknet.NetworkSettings.MyPeerID = AppSettings.ClientID
tasknet.NetworkSettings.ServerPort = AppSettings.ServerPort
tasknet.NetworkSettings.OnStatusUpdate = Event_StatusUpdate
tasknet.NetworkSettings.BidTimeout = 5
tasknet.NetworkSettings.AcceptedBidsPerTask = 3
tasknet.NetworkSettings.TaskTypeFolder = AppSettings.TaskTypesFolder
tasknet.NetworkSettings.DbFolder = AppSettings.DbFolder
tasknet.NetworkSettings.RouteOnly = AppSettings.RouteOnly
tasknet.NetworkCallbacks.OnTaskStatusUpdate = Event_TaskStatusUpdate
tasknet.NetworkCallbacks.OnTaskResult = Event_TaskResultReceived
tasknet.LoadDefaultPeerTable(default_peers)
UpdateInfoStatusBar()
}
func UpdateInfoStatusBar() {
ui.UpdateStatusBar("🤖 "+AppSettings.ClientID, 2)
}