frontend: copy settings.json on settings reload (to handle delayed settings propagation)
This commit is contained in:
parent
4820d42327
commit
caea02bb4d
|
@ -2,6 +2,7 @@ DASHBOARD/
|
|||
FILES/
|
||||
PKI/
|
||||
SETTINGS/
|
||||
SETTINGSDIST/
|
||||
TEAMS/
|
||||
submissions/
|
||||
admin/sync/README.html
|
||||
|
|
|
@ -157,7 +157,7 @@ server {
|
|||
add_header Cache-Control no-cache;
|
||||
}
|
||||
location = /settings.json {
|
||||
root /srv/SETTINGS/;
|
||||
root /srv/SETTINGSDIST/;
|
||||
expires epoch;
|
||||
add_header X-FIC-time $msec;
|
||||
add_header Cache-Control no-cache;
|
||||
|
|
|
@ -149,7 +149,7 @@ server {
|
|||
add_header Cache-Control no-cache;
|
||||
}
|
||||
location = /settings.json {
|
||||
root /srv/SETTINGS/;
|
||||
root /srv/SETTINGSDIST/;
|
||||
expires epoch;
|
||||
add_header X-FIC-time $msec;
|
||||
add_header Cache-Control no-cache;
|
||||
|
|
|
@ -138,7 +138,7 @@ services:
|
|||
- /www/htdocs-frontend:/srv/htdocs-frontend:ro
|
||||
- /var/lib/fic/files:/srv/FILES: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/teams:/srv/TEAMS:ro
|
||||
net: /run/netns/nginx
|
||||
|
@ -150,6 +150,7 @@ services:
|
|||
- /var/lib/fic/files
|
||||
- /var/lib/fic/pki
|
||||
- /var/lib/fic/startingblock
|
||||
- /var/lib/fic/settingsdist
|
||||
- /var/lib/fic/teams
|
||||
- name: fic-frontend
|
||||
image: nemunaire/fic-frontend:latest
|
||||
|
@ -158,6 +159,7 @@ services:
|
|||
- /etc/hosts:/etc/hosts:ro
|
||||
- /var/lib/fic/files:/srv/FILES:ro
|
||||
- /var/lib/fic/settings:/srv/SETTINGS:ro
|
||||
- /var/lib/fic/settingsdist:/srv/SETTINGSDIST
|
||||
- /var/lib/fic/startingblock:/srv/startingblock
|
||||
- /var/lib/fic/submissions:/srv/submissions
|
||||
- /var/lib/fic/teams:/srv/TEAMS:ro
|
||||
|
@ -166,6 +168,7 @@ services:
|
|||
mkdir:
|
||||
- /var/lib/fic/files
|
||||
- /var/lib/fic/settings
|
||||
- /var/lib/fic/settingsdist
|
||||
- /var/lib/fic/startingblock
|
||||
- /var/lib/fic/submissions
|
||||
- /var/lib/fic/teams
|
||||
|
|
|
@ -21,6 +21,7 @@ func main() {
|
|||
var prefix = flag.String("prefix", "/", "Request path prefix to strip (from proxy)")
|
||||
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(&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(&SubmissionDir, "submission", "./submissions/", "Base directory where save submissions")
|
||||
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, "/")
|
||||
|
||||
// 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/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/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
|
||||
http.Handle(fmt.Sprintf("%s/css/", *prefix), http.StripPrefix(*prefix, http.FileServer(http.Dir(staticDir))))
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"path"
|
||||
"time"
|
||||
|
||||
"srs.epita.fr/fic-server/settings"
|
||||
|
@ -10,6 +12,8 @@ import (
|
|||
|
||||
var startedFile = "started"
|
||||
|
||||
var SettingsDistDir = "./SETTINGSDIST/"
|
||||
|
||||
var touchTimer *time.Timer = nil
|
||||
var challengeStart time.Time
|
||||
var challengeEnd time.Time
|
||||
|
@ -24,6 +28,15 @@ func touchStartedFile() {
|
|||
}
|
||||
|
||||
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 touchTimer != nil {
|
||||
touchTimer.Stop()
|
||||
|
|
Loading…
Reference in New Issue