frontend: copy settings.json on settings reload (to handle delayed settings propagation)
This commit is contained in:
parent
4820d42327
commit
caea02bb4d
6 changed files with 29 additions and 4 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,6 +2,7 @@ DASHBOARD/
|
||||||
FILES/
|
FILES/
|
||||||
PKI/
|
PKI/
|
||||||
SETTINGS/
|
SETTINGS/
|
||||||
|
SETTINGSDIST/
|
||||||
TEAMS/
|
TEAMS/
|
||||||
submissions/
|
submissions/
|
||||||
admin/sync/README.html
|
admin/sync/README.html
|
||||||
|
|
|
@ -157,7 +157,7 @@ server {
|
||||||
add_header Cache-Control no-cache;
|
add_header Cache-Control no-cache;
|
||||||
}
|
}
|
||||||
location = /settings.json {
|
location = /settings.json {
|
||||||
root /srv/SETTINGS/;
|
root /srv/SETTINGSDIST/;
|
||||||
expires epoch;
|
expires epoch;
|
||||||
add_header X-FIC-time $msec;
|
add_header X-FIC-time $msec;
|
||||||
add_header Cache-Control no-cache;
|
add_header Cache-Control no-cache;
|
||||||
|
|
|
@ -149,7 +149,7 @@ server {
|
||||||
add_header Cache-Control no-cache;
|
add_header Cache-Control no-cache;
|
||||||
}
|
}
|
||||||
location = /settings.json {
|
location = /settings.json {
|
||||||
root /srv/SETTINGS/;
|
root /srv/SETTINGSDIST/;
|
||||||
expires epoch;
|
expires epoch;
|
||||||
add_header X-FIC-time $msec;
|
add_header X-FIC-time $msec;
|
||||||
add_header Cache-Control no-cache;
|
add_header Cache-Control no-cache;
|
||||||
|
|
|
@ -138,7 +138,7 @@ services:
|
||||||
- /www/htdocs-frontend:/srv/htdocs-frontend:ro
|
- /www/htdocs-frontend:/srv/htdocs-frontend:ro
|
||||||
- /var/lib/fic/files:/srv/FILES:ro
|
- /var/lib/fic/files:/srv/FILES:ro
|
||||||
- /var/lib/fic/pki:/srv/PKI:ro
|
- /var/lib/fic/pki:/srv/PKI:ro
|
||||||
- /var/lib/fic/settings:/srv/SETTINGS:ro
|
- /var/lib/fic/settingsdist:/srv/SETTINGSDIST:ro
|
||||||
- /var/lib/fic/startingblock:/srv/startingblock:ro
|
- /var/lib/fic/startingblock:/srv/startingblock:ro
|
||||||
- /var/lib/fic/teams:/srv/TEAMS:ro
|
- /var/lib/fic/teams:/srv/TEAMS:ro
|
||||||
net: /run/netns/nginx
|
net: /run/netns/nginx
|
||||||
|
@ -150,6 +150,7 @@ services:
|
||||||
- /var/lib/fic/files
|
- /var/lib/fic/files
|
||||||
- /var/lib/fic/pki
|
- /var/lib/fic/pki
|
||||||
- /var/lib/fic/startingblock
|
- /var/lib/fic/startingblock
|
||||||
|
- /var/lib/fic/settingsdist
|
||||||
- /var/lib/fic/teams
|
- /var/lib/fic/teams
|
||||||
- name: fic-frontend
|
- name: fic-frontend
|
||||||
image: nemunaire/fic-frontend:latest
|
image: nemunaire/fic-frontend:latest
|
||||||
|
@ -158,6 +159,7 @@ services:
|
||||||
- /etc/hosts:/etc/hosts:ro
|
- /etc/hosts:/etc/hosts:ro
|
||||||
- /var/lib/fic/files:/srv/FILES:ro
|
- /var/lib/fic/files:/srv/FILES:ro
|
||||||
- /var/lib/fic/settings:/srv/SETTINGS:ro
|
- /var/lib/fic/settings:/srv/SETTINGS:ro
|
||||||
|
- /var/lib/fic/settingsdist:/srv/SETTINGSDIST
|
||||||
- /var/lib/fic/startingblock:/srv/startingblock
|
- /var/lib/fic/startingblock:/srv/startingblock
|
||||||
- /var/lib/fic/submissions:/srv/submissions
|
- /var/lib/fic/submissions:/srv/submissions
|
||||||
- /var/lib/fic/teams:/srv/TEAMS:ro
|
- /var/lib/fic/teams:/srv/TEAMS:ro
|
||||||
|
@ -166,6 +168,7 @@ services:
|
||||||
mkdir:
|
mkdir:
|
||||||
- /var/lib/fic/files
|
- /var/lib/fic/files
|
||||||
- /var/lib/fic/settings
|
- /var/lib/fic/settings
|
||||||
|
- /var/lib/fic/settingsdist
|
||||||
- /var/lib/fic/startingblock
|
- /var/lib/fic/startingblock
|
||||||
- /var/lib/fic/submissions
|
- /var/lib/fic/submissions
|
||||||
- /var/lib/fic/teams
|
- /var/lib/fic/teams
|
||||||
|
|
|
@ -21,6 +21,7 @@ func main() {
|
||||||
var prefix = flag.String("prefix", "/", "Request path prefix to strip (from proxy)")
|
var prefix = flag.String("prefix", "/", "Request path prefix to strip (from proxy)")
|
||||||
var teamsDir = flag.String("teams", "./TEAMS/", "Base directory where find existing teams")
|
var teamsDir = flag.String("teams", "./TEAMS/", "Base directory where find existing teams")
|
||||||
flag.StringVar(&settings.SettingsDir, "settings", settings.SettingsDir, "Base directory where read settings")
|
flag.StringVar(&settings.SettingsDir, "settings", settings.SettingsDir, "Base directory where read settings")
|
||||||
|
flag.StringVar(&SettingsDistDir, "settingsDist", SettingsDistDir, "Directory where place settings to distribute")
|
||||||
flag.StringVar(&startedFile, "startedFile", startedFile, "Path to the file to create/remove whether or not the challenge is running")
|
flag.StringVar(&startedFile, "startedFile", startedFile, "Path to the file to create/remove whether or not the challenge is running")
|
||||||
flag.StringVar(&SubmissionDir, "submission", "./submissions/", "Base directory where save submissions")
|
flag.StringVar(&SubmissionDir, "submission", "./submissions/", "Base directory where save submissions")
|
||||||
var simulator = flag.String("simulator", "", "Team to simulate (for development only)")
|
var simulator = flag.String("simulator", "", "Team to simulate (for development only)")
|
||||||
|
@ -40,6 +41,13 @@ func main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Println("Creating settingsDist directory...")
|
||||||
|
if _, err := os.Stat(SettingsDistDir); os.IsNotExist(err) {
|
||||||
|
if err = os.MkdirAll(SettingsDistDir, 0755); err != nil {
|
||||||
|
log.Fatal("Unable to create settingsdist directory:", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
*prefix = strings.TrimRight(*prefix, "/")
|
*prefix = strings.TrimRight(*prefix, "/")
|
||||||
|
|
||||||
// Load configuration
|
// Load configuration
|
||||||
|
@ -67,7 +75,7 @@ func main() {
|
||||||
http.Handle(fmt.Sprintf("%s/teams.json", *prefix), http.StripPrefix(*prefix, http.FileServer(http.Dir(*teamsDir))))
|
http.Handle(fmt.Sprintf("%s/teams.json", *prefix), http.StripPrefix(*prefix, http.FileServer(http.Dir(*teamsDir))))
|
||||||
http.Handle(fmt.Sprintf("%s/themes.json", *prefix), http.StripPrefix(*prefix, http.FileServer(http.Dir(*teamsDir))))
|
http.Handle(fmt.Sprintf("%s/themes.json", *prefix), http.StripPrefix(*prefix, http.FileServer(http.Dir(*teamsDir))))
|
||||||
http.Handle(fmt.Sprintf("%s/stats.json", *prefix), http.StripPrefix(*prefix, http.FileServer(http.Dir(*teamsDir))))
|
http.Handle(fmt.Sprintf("%s/stats.json", *prefix), http.StripPrefix(*prefix, http.FileServer(http.Dir(*teamsDir))))
|
||||||
http.Handle(fmt.Sprintf("%s/settings.json", *prefix), http.StripPrefix(*prefix, http.FileServer(http.Dir(settings.SettingsDir))))
|
http.Handle(fmt.Sprintf("%s/settings.json", *prefix), http.StripPrefix(*prefix, http.FileServer(http.Dir(SettingsDistDir))))
|
||||||
|
|
||||||
// Serve static assets
|
// Serve static assets
|
||||||
http.Handle(fmt.Sprintf("%s/css/", *prefix), http.StripPrefix(*prefix, http.FileServer(http.Dir(staticDir))))
|
http.Handle(fmt.Sprintf("%s/css/", *prefix), http.StripPrefix(*prefix, http.FileServer(http.Dir(staticDir))))
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
"path"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"srs.epita.fr/fic-server/settings"
|
"srs.epita.fr/fic-server/settings"
|
||||||
|
@ -10,6 +12,8 @@ import (
|
||||||
|
|
||||||
var startedFile = "started"
|
var startedFile = "started"
|
||||||
|
|
||||||
|
var SettingsDistDir = "./SETTINGSDIST/"
|
||||||
|
|
||||||
var touchTimer *time.Timer = nil
|
var touchTimer *time.Timer = nil
|
||||||
var challengeStart time.Time
|
var challengeStart time.Time
|
||||||
var challengeEnd time.Time
|
var challengeEnd time.Time
|
||||||
|
@ -24,6 +28,15 @@ func touchStartedFile() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func reloadSettings(config settings.FICSettings) {
|
func reloadSettings(config settings.FICSettings) {
|
||||||
|
// Copy the new settings file for distribution
|
||||||
|
if data, err := ioutil.ReadFile(path.Join(settings.SettingsDir, settings.SettingsFile)); err != nil {
|
||||||
|
log.Println("Unable to read settings file:", err)
|
||||||
|
} else if err = ioutil.WriteFile(path.Join(SettingsDistDir, settings.SettingsFile + ".tmp"), data, 0644); err != nil {
|
||||||
|
log.Println("Unable to write tmp settings file:", err)
|
||||||
|
} else if err := os.Rename(path.Join(SettingsDistDir, settings.SettingsFile + ".tmp"), path.Join(SettingsDistDir, settings.SettingsFile)); err != nil {
|
||||||
|
log.Println("Unable to move new settings file:", err)
|
||||||
|
}
|
||||||
|
|
||||||
if challengeStart != config.Start || challengeEnd != config.End {
|
if challengeStart != config.Start || challengeEnd != config.End {
|
||||||
if touchTimer != nil {
|
if touchTimer != nil {
|
||||||
touchTimer.Stop()
|
touchTimer.Stop()
|
||||||
|
|
Reference in a new issue