Skip to content

Commit

Permalink
#10 - Early config reload support, added benefit of cleaning up Actio…
Browse files Browse the repository at this point in the history
…nButton.js early state code
  • Loading branch information
jamesread committed Jul 12, 2021
1 parent 6c75d83 commit 7dcc62a
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 26 deletions.
21 changes: 17 additions & 4 deletions cmd/OliveTin/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import (

config "github.com/jamesread/OliveTin/internal/config"
"github.com/spf13/viper"
"github.com/fsnotify/fsnotify"
"os"
)

Expand Down Expand Up @@ -43,16 +44,28 @@ func init() {

cfg = config.DefaultConfig()

if err := viper.UnmarshalExact(cfg); err != nil {
log.Errorf("Config unmarshal error %+v", err)
os.Exit(1)
}
reloadConfig();

if logLevel, err := log.ParseLevel(cfg.LogLevel); err == nil {
log.SetLevel(logLevel)
}

viper.WatchConfig()
viper.OnConfigChange(func(e fsnotify.Event) {
if e.Op == fsnotify.Write {
log.Info("Config file changed:", e.String())

reloadConfig();
}
})
}

func reloadConfig() {
if err := viper.UnmarshalExact(&cfg); err != nil {
log.Errorf("Config unmarshal error %+v", err)
os.Exit(1)
}

}

func main() {
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ go 1.15

require (
github.com/denisbrodbeck/machineid v1.0.1 // indirect
github.com/fsnotify/fsnotify v1.4.9 // indirect
github.com/go-co-op/gocron v1.6.2 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.4.0
github.com/sirupsen/logrus v1.8.1
Expand Down
37 changes: 15 additions & 22 deletions webui/js/ActionButton.js
Original file line number Diff line number Diff line change
@@ -1,29 +1,35 @@
class ActionButton extends window.HTMLButtonElement {
constructFromJson (json) {
this.updateIterationTimestamp = 0;

this.title = json.title
this.states = []
this.stateLabels = []
this.temporaryStatusMessage = null
this.currentState = 0
this.isWaiting = false
this.actionCallUrl = window.restBaseUrl + 'StartAction?actionName=' + this.title

if (json.icon === '') {
this.unicodeIcon = '&#x1f4a9'
} else {
this.unicodeIcon = unescape(json.icon)
}
this.updateFromJson(json)

this.onclick = () => { this.startAction() }

this.constructTemplate()

this.updateHtml()

this.setAttribute("id", "actionButton_" + json.id)
}

updateFromJson (json) {
console.log("updating button")
// Fields that should not be updated
//
// title - as the callback URL relies on it
// actionCallbackUrl - as it's based on the title
// temporaryStatusMessage - as the button might be "waiting" on execution to finish while it's being updated.

if (json.icon === '') {
this.unicodeIcon = '&#x1f4a9'
} else {
this.unicodeIcon = unescape(json.icon)
}
}

startAction () {
Expand Down Expand Up @@ -73,7 +79,6 @@ class ActionButton extends window.HTMLButtonElement {

this.domTitle = this.querySelector('.title')
this.domIcon = this.querySelector('.icon')

}

updateHtml () {
Expand All @@ -96,18 +101,6 @@ class ActionButton extends window.HTMLButtonElement {

this.domIcon.innerHTML = this.unicodeIcon
}

getCurrentStateLabel (useLabels = true) {
if (useLabels) {
return this.stateLabels[this.currentState]
} else {
return this.states[this.currentState]
}
}

getNextStateLabel () {
return this.stateLabels[this.currentState + 1]
}
}

window.customElements.define('action-button', ActionButton, { extends: 'button' })
13 changes: 13 additions & 0 deletions webui/js/marshaller.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,28 @@
import './ActionButton.js' // To define action-button

export function marshalActionButtonsJsonToHtml (json) {
const currentIterationTimestamp = Date.now()

for (const jsonButton of json.actions) {
var htmlButton = document.querySelector('#actionButton_' + jsonButton.id)

if (htmlButton == null) {
htmlButton = document.createElement('button', { is: 'action-button' })
htmlButton.constructFromJson(jsonButton)

document.getElementById('rootGroup').appendChild(htmlButton)
} else {
htmlButton.updateFromJson(jsonButton)
htmlButton.updateHtml()
}

console.log("action", jsonButton.title)
htmlButton.updateIterationTimestamp = currentIterationTimestamp;
}

for (const existingButton of document.querySelectorAll('button')) {
if (existingButton.updateIterationTimestamp != currentIterationTimestamp) {
existingButton.remove();
}
}
}

0 comments on commit 7dcc62a

Please sign in to comment.