admin: display on interface time synchronization diff
This commit is contained in:
parent
fa33fac003
commit
5dcb13629a
5 changed files with 48 additions and 1 deletions
26
admin/api/timestamp.go
Normal file
26
admin/api/timestamp.go
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/julienschmidt/httprouter"
|
||||||
|
)
|
||||||
|
|
||||||
|
var TimestampCheck = "submissions"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
router.GET("/api/timestamps.json", apiHandler(
|
||||||
|
func(httprouter.Params, []byte) (interface{}, error) {
|
||||||
|
if stat, err := os.Stat(TimestampCheck); err != nil {
|
||||||
|
return nil, err
|
||||||
|
} else {
|
||||||
|
now := time.Now().UTC()
|
||||||
|
return map[string]interface{}{
|
||||||
|
"frontend": stat.ModTime().UTC(),
|
||||||
|
"backend": now,
|
||||||
|
"diffFB": now.Sub(stat.ModTime()),
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
}
|
|
@ -92,6 +92,7 @@ func main() {
|
||||||
var bind = flag.String("bind", "127.0.0.1:8081", "Bind port/socket")
|
var bind = flag.String("bind", "127.0.0.1:8081", "Bind port/socket")
|
||||||
var dsn = flag.String("dsn", fic.DSNGenerator(), "DSN to connect to the MySQL server")
|
var dsn = flag.String("dsn", fic.DSNGenerator(), "DSN to connect to the MySQL server")
|
||||||
var baseURL = flag.String("baseurl", "/", "URL prepended to each URL")
|
var baseURL = flag.String("baseurl", "/", "URL prepended to each URL")
|
||||||
|
flag.StringVar(&api.TimestampCheck, "timestampCheck", api.TimestampCheck, "Path regularly touched by frontend to check time synchronisation")
|
||||||
flag.StringVar(&pki.PKIDir, "pki", "./PKI", "Base directory where found PKI scripts")
|
flag.StringVar(&pki.PKIDir, "pki", "./PKI", "Base directory where found PKI scripts")
|
||||||
flag.StringVar(&StaticDir, "static", "./htdocs-admin/", "Directory containing static files")
|
flag.StringVar(&StaticDir, "static", "./htdocs-admin/", "Directory containing static files")
|
||||||
flag.StringVar(&api.TeamsDir, "teams", "./TEAMS", "Base directory where save teams JSON files")
|
flag.StringVar(&api.TeamsDir, "teams", "./TEAMS", "Base directory where save teams JSON files")
|
||||||
|
@ -144,6 +145,9 @@ func main() {
|
||||||
if api.TeamsDir, err = filepath.Abs(api.TeamsDir); err != nil {
|
if api.TeamsDir, err = filepath.Abs(api.TeamsDir); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
if api.TimestampCheck, err = filepath.Abs(api.TimestampCheck); err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
if settings.SettingsDir, err = filepath.Abs(settings.SettingsDir); err != nil {
|
if settings.SettingsDir, err = filepath.Abs(settings.SettingsDir); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,6 +129,9 @@ angular.module("FICApp")
|
||||||
.factory("Version", function($resource) {
|
.factory("Version", function($resource) {
|
||||||
return $resource("/api/version")
|
return $resource("/api/version")
|
||||||
})
|
})
|
||||||
|
.factory("Timestamp", function($resource) {
|
||||||
|
return $resource("/api/timestamps.json")
|
||||||
|
})
|
||||||
.factory("Monitor", function($resource) {
|
.factory("Monitor", function($resource) {
|
||||||
return $resource("/api/monitor/:machineId", { machineId: '@id' })
|
return $resource("/api/monitor/:machineId", { machineId: '@id' })
|
||||||
})
|
})
|
||||||
|
@ -365,6 +368,15 @@ angular.module("FICApp")
|
||||||
$scope.v = Version.get();
|
$scope.v = Version.get();
|
||||||
})
|
})
|
||||||
|
|
||||||
|
.controller("TimestampController", function($scope, $interval, Timestamp) {
|
||||||
|
$scope.t = Timestamp.get();
|
||||||
|
var refresh = function() {
|
||||||
|
$scope.t = Timestamp.get();
|
||||||
|
}
|
||||||
|
var myinterval = $interval(refresh, 2500);
|
||||||
|
$scope.$on('$destroy', function () { $interval.cancel(myinterval); });
|
||||||
|
})
|
||||||
|
|
||||||
.controller("MonitorController", function($scope, Monitor) {
|
.controller("MonitorController", function($scope, Monitor) {
|
||||||
$scope.monitor = Monitor.get();
|
$scope.monitor = Monitor.get();
|
||||||
})
|
})
|
||||||
|
|
|
@ -7,4 +7,8 @@
|
||||||
<p ng-controller="VersionController">
|
<p ng-controller="VersionController">
|
||||||
Version de l'API : {{ v.version }}
|
Version de l'API : {{ v.version }}
|
||||||
</p>
|
</p>
|
||||||
|
<p ng-controller="TimestampController">
|
||||||
|
Latence frontend-backend : <ng-pluralize count="t.diffFB / 1000000000" when="{'one': '{} seconde', 'other': '{} secondes'}"></ng-pluralize><br>
|
||||||
|
Dernière synchronisation du frontend : {{ t.frontend | date:"mediumTime" }}
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -152,7 +152,7 @@ services:
|
||||||
- /var/lib/fic/backups
|
- /var/lib/fic/backups
|
||||||
- name: fic-admin
|
- name: fic-admin
|
||||||
image: nemunaire/fic-admin:latest
|
image: nemunaire/fic-admin:latest
|
||||||
command: ["/srv/admin", "-bind=:8081", "-baseurl=/admin/", "-localimport=/mnt/fic"]
|
command: ["/srv/admin", "-bind=:8081", "-baseurl=/admin/", "-localimport=/mnt/fic", "-timestampCheck=/srv/submissions"]
|
||||||
env:
|
env:
|
||||||
- MYSQL_HOST=db
|
- MYSQL_HOST=db
|
||||||
- FICCA_PASS=jee8AhloAith1aesCeQu5ahgIegaeM4K
|
- FICCA_PASS=jee8AhloAith1aesCeQu5ahgIegaeM4K
|
||||||
|
@ -164,6 +164,7 @@ services:
|
||||||
- /var/lib/fic/pki:/srv/PKI
|
- /var/lib/fic/pki:/srv/PKI
|
||||||
- /var/lib/fic/teams:/srv/TEAMS
|
- /var/lib/fic/teams:/srv/TEAMS
|
||||||
- /var/lib/fic/settings:/srv/SETTINGS
|
- /var/lib/fic/settings:/srv/SETTINGS
|
||||||
|
- /var/lib/fic/submissions:/srv/submissions:ro
|
||||||
net: /run/netns/fic-admin
|
net: /run/netns/fic-admin
|
||||||
pid: new
|
pid: new
|
||||||
ipc: new
|
ipc: new
|
||||||
|
|
Reference in a new issue