Remove need for restart on settings change
Some checks failed
ecodash/pipeline/head There was a failure building this commit
Some checks failed
ecodash/pipeline/head There was a failure building this commit
This commit is contained in:
parent
75423645ff
commit
4bf1455ba4
6
BUILD.md
6
BUILD.md
|
@ -12,7 +12,7 @@ If you really have to build it yourself, we recommend you Docker over binaries.
|
|||
1. Download the Go Compiler from https://go.dev/dl/ or from your repository's package manager (it's usually called `go` or `golang`)
|
||||
2. Download the Git SCM from https://git-scm.com/download/linux or from your package manager (it's always called `git`)
|
||||
3. Download `golangci-lint` from https://golangci-lint.run/
|
||||
4. Clone the repository by running `git clone https://gitea.massivebox.net/ecodash/ecodash.git ` inside a command prompt
|
||||
4. Clone the repository by running `git clone https://git.massivebox.net/ecodash/ecodash.git ` inside a command prompt
|
||||
5. Switch to the project directory with `cd ecodash`
|
||||
6. Run `golangci-lint run` to lint all project files
|
||||
7. Build with `go build src/main/main.go -o ecodash`. This will generate an executable, `ecodash`, in the same directory.
|
||||
|
@ -22,9 +22,7 @@ If you really have to build it yourself, we recommend you Docker over binaries.
|
|||
1. Install the latest release of the Go Compiler for Windows from https://go.dev/dl/
|
||||
2. Install the Git SCM from https://git-scm.com/download/win. The "Standalone installer" is recommended. All the default settings will work fine.
|
||||
3. Download `golangci-lint` from https://golangci-lint.run/
|
||||
4. Clone the repository by running `git clone https://gitea.massivebox.net/ecodash/ecodash.git ` inside a command prompt
|
||||
4. Clone the repository by running `git clone https://git.massivebox.net/ecodash/ecodash.git ` inside a command prompt
|
||||
5. Switch to the project directory with `cd ecodash`
|
||||
6. Run `golangci-lint run` to lint all project files
|
||||
7. Build with `go build src/main/main.go -o ecodash`. This will generate an executable, `ecodash.exe`, in the same directory.
|
||||
|
||||
## Docker
|
|
@ -1,6 +1,6 @@
|
|||
# 🌿 EcoDash
|
||||
|
||||
[![status-badge](https://woodpecker.massivebox.net/api/badges/ecodash/ecodash/status.svg)](https://woodpecker.massivebox.net/ecodash/ecohttpsdash) [![Visit our website](https://cloud.massivebox.net/api/public/dl/yEzoZyW8?inline=true)](https://ecodash.xyz) [![Support the project](https://cloud.massivebox.net/api/public/dl/dthbBylL?inline=true)](https://ecodash.xyz/contribute)
|
||||
[![status-badge](https://jenkins.massivebox.net/job/ecodash/job/master/badge/icon)](https://jenkins.massivebox.net/job/ecodash/) [![Visit our website](https://cloud.massivebox.net/s/DP3ZSaDS84wQ6jp/download?path=%2FEcoDash&files=visit-website.svg)](https://ecodash.xyz) [![Support the project](https://cloud.massivebox.net/s/DP3ZSaDS84wQ6jp/download?path=%2FEcoDash&files=support-the%20project.svg)](https://ecodash.xyz/contribute)
|
||||
|
||||
EcoDash is a simple way to show your users how much your server consumes.
|
||||
It's intended as a medium of transparency, that gives your users an idea about the consumption of your machine. It's not meant to be 100% accurate.
|
||||
|
|
3
jenkins/Jenkinsfile
vendored
3
jenkins/Jenkinsfile
vendored
|
@ -66,7 +66,8 @@ pipeline {
|
|||
}
|
||||
}
|
||||
|
||||
stage('Publish built files') {
|
||||
stage('Publish build artifacts on tag') {
|
||||
when { buildingTag() }
|
||||
steps {
|
||||
sh 'mv ecodash_x86 ecodash; zip -r ecodash-x86.zip templates ecodash'
|
||||
archiveArtifacts artifacts: "ecodash-x86.zip"
|
||||
|
|
|
@ -61,10 +61,10 @@ func formatURL(url string) (string, error) {
|
|||
return url, nil
|
||||
}
|
||||
|
||||
func LoadConfig() (config *Config, isFirstRun bool, err error) {
|
||||
func LoadConfig() (config *Config, err error) {
|
||||
db, err := sql.Open("sqlite", "./database.db")
|
||||
if err != nil {
|
||||
return &Config{}, false, err
|
||||
return &Config{}, err
|
||||
}
|
||||
|
||||
_, err = db.Exec(`CREATE TABLE IF NOT EXISTS "cache" (
|
||||
|
@ -74,7 +74,7 @@ func LoadConfig() (config *Config, isFirstRun bool, err error) {
|
|||
PRIMARY KEY("time")
|
||||
);`)
|
||||
if err != nil {
|
||||
return &Config{}, false, err
|
||||
return &Config{}, err
|
||||
}
|
||||
|
||||
defaultConfig := &Config{}
|
||||
|
@ -95,24 +95,24 @@ func LoadConfig() (config *Config, isFirstRun bool, err error) {
|
|||
if err != nil {
|
||||
// if the data file doesn't exist, we consider it a first run
|
||||
if os.IsNotExist(err) {
|
||||
return defaultConfig, true, nil
|
||||
return defaultConfig, nil
|
||||
}
|
||||
return &Config{}, false, err
|
||||
return &Config{}, err
|
||||
}
|
||||
|
||||
// if the data file is empty, we consider it as a first run
|
||||
if len(data) == 0 {
|
||||
return defaultConfig, true, nil
|
||||
return defaultConfig, nil
|
||||
}
|
||||
|
||||
conf := &Config{}
|
||||
err = json.Unmarshal(data, &conf)
|
||||
if err != nil {
|
||||
return &Config{}, false, err
|
||||
return &Config{}, err
|
||||
}
|
||||
conf.db = db
|
||||
|
||||
return conf, false, nil
|
||||
return conf, nil
|
||||
}
|
||||
|
||||
func (config *Config) IsAuthorized(c *fiber.Ctx) bool {
|
||||
|
|
|
@ -53,9 +53,9 @@ func (config *Config) AdminEndpoint(c *fiber.Ctx) error {
|
|||
})
|
||||
}
|
||||
return config.RenderAdminPanel(c, Warning{
|
||||
Header: "Restart needed",
|
||||
Body: "In order to apply changes, please <b>restart EcoDash</b>.<br>" +
|
||||
"If you're running via Docker, click <a href='./restart'>here</a> to restart automatically.",
|
||||
Header: "Settings applied",
|
||||
Body: "Your settings have been tested and <b>applied successfully</b>.<br>" +
|
||||
"You can continue using EcoDash on the <a href='./'>Home</a>.",
|
||||
IsSuccess: true,
|
||||
})
|
||||
}
|
||||
|
@ -117,7 +117,7 @@ func (config *Config) saveAdminForm(c *fiber.Ctx) error {
|
|||
return err
|
||||
}
|
||||
|
||||
form := &Config{
|
||||
form := Config{
|
||||
HomeAssistant: HomeAssistant{ /*BaseURL to be filled later*/ APIKey: c.FormValue("api_key"), InstallationDate: dayStart(parsedTime)},
|
||||
Sensors: Sensors{PolledSmartEnergySummation: c.FormValue("polled_smart_energy_summation"), FossilPercentage: c.FormValue("fossil_percentage")},
|
||||
Administrator: Administrator{Username: c.FormValue("username") /*PasswordHash to be filled later*/},
|
||||
|
@ -151,6 +151,7 @@ func (config *Config) saveAdminForm(c *fiber.Ctx) error {
|
|||
return err
|
||||
}
|
||||
|
||||
*config = form
|
||||
return os.WriteFile("config.json", js, 0o600)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,33 +1,28 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"git.massivebox.net/ecodash/ecodash/src/ecodash"
|
||||
"git.massivebox.net/ecodash/ecodash/src/tools"
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gofiber/template/html"
|
||||
"github.com/robfig/cron/v3"
|
||||
"log"
|
||||
"os"
|
||||
)
|
||||
|
||||
func main() {
|
||||
config, isFirstRun, err := ecodash.LoadConfig()
|
||||
config, err := ecodash.LoadConfig()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
if !isFirstRun {
|
||||
cr := cron.New()
|
||||
_, err = cr.AddFunc("@hourly", config.UpdateHistory)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
cr.Start()
|
||||
config.UpdateHistory()
|
||||
cr := cron.New()
|
||||
_, err = cr.AddFunc("@hourly", config.UpdateHistory)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
cr.Start()
|
||||
config.UpdateHistory()
|
||||
|
||||
engine := html.New("./templates/"+config.Dashboard.Theme, ".html")
|
||||
engine.AddFunc("divide", tools.TemplateDivide)
|
||||
|
@ -40,7 +35,7 @@ func main() {
|
|||
app.Static("/assets", "./templates/"+config.Dashboard.Theme+"/assets")
|
||||
|
||||
app.Get("/", func(c *fiber.Ctx) error {
|
||||
if isFirstRun {
|
||||
if config.Administrator.Username == "" || config.Administrator.PasswordHash == "" {
|
||||
c.Cookie(&fiber.Cookie{Name: "admin_username", Value: ""})
|
||||
c.Cookie(&fiber.Cookie{Name: "admin_password_hash", Value: tools.Hash("")})
|
||||
return config.RenderAdminPanel(c)
|
||||
|
@ -54,17 +49,6 @@ func main() {
|
|||
|
||||
app.All("/admin", config.AdminEndpoint)
|
||||
|
||||
app.Get("/restart", func(c *fiber.Ctx) error {
|
||||
if config.IsAuthorized(c) {
|
||||
go func() {
|
||||
time.Sleep(time.Second)
|
||||
os.Exit(1)
|
||||
}()
|
||||
return c.Render("restart", config.TemplateDefaultsMap(), "base")
|
||||
}
|
||||
return c.Redirect("./", http.StatusTemporaryRedirect)
|
||||
})
|
||||
|
||||
port := os.Getenv("PORT")
|
||||
if port == "" {
|
||||
port = "80"
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
<h1>Restarting...</h1>
|
||||
<p>
|
||||
You should be able to continue using EcoDash soon by clicking <a href="/">here</a>.<br>
|
||||
If you get an error like "Address Unreachable", make sure you've allowed your container to restart automatically.<br>
|
||||
Check the error logs if the error persists.
|
||||
</p>
|
Loading…
Reference in a new issue