feat(deploy): reliability API routes, atomic releases, version single-source
This commit is contained in:
@@ -4863,6 +4863,60 @@ def h_rfplan_post(ctx):
|
||||
return (200, result) if ok else (502, result)
|
||||
|
||||
|
||||
def h_profiles_get(ctx):
|
||||
import mk8_profiles
|
||||
return 200, {'profiles': mk8_profiles.list_profiles()}
|
||||
|
||||
|
||||
def h_profile_save(ctx):
|
||||
import mk8_events
|
||||
import mk8_profiles
|
||||
body = ctx.body or {}
|
||||
name = (body.get('name') or '').strip()
|
||||
if not name:
|
||||
return 400, {'error': 'profile name is required'}
|
||||
try:
|
||||
ok = bool(mk8_profiles.snapshot(name))
|
||||
except ValueError as exc:
|
||||
return 400, {'error': str(exc)}
|
||||
except OSError:
|
||||
ok = False
|
||||
try:
|
||||
mk8_events.log_event('profile_save', sev='info' if ok else 'warn',
|
||||
msg='profile %s %s'
|
||||
% (name, 'saved' if ok else 'save failed'),
|
||||
meta={'name': name, 'ok': ok})
|
||||
except Exception:
|
||||
pass
|
||||
return (200, {'ok': True}) if ok else (502, {'ok': False})
|
||||
|
||||
|
||||
def h_profile_restore(ctx):
|
||||
import mk8_events
|
||||
import mk8_gate
|
||||
import mk8_profiles
|
||||
body = ctx.body or {}
|
||||
name = (body.get('name') or '').strip()
|
||||
if not name:
|
||||
return 400, {'error': 'profile name is required'}
|
||||
mk8_gate.enter('restore_profile')
|
||||
try:
|
||||
result = mk8_profiles.restore(name)
|
||||
except ValueError as exc:
|
||||
return 400, {'error': str(exc)}
|
||||
device_run(['wifi', 'reload'], timeout=45)
|
||||
ok = bool(result.get('ok'))
|
||||
try:
|
||||
mk8_events.log_event('profile_restore',
|
||||
sev='info' if ok else 'warn',
|
||||
msg='profile %s %s' % (name, 'restored' if ok
|
||||
else 'restore failed'),
|
||||
meta=result)
|
||||
except Exception:
|
||||
pass
|
||||
return (200, result) if ok else (502, result)
|
||||
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Startup environment check: run once at service startup (and via
|
||||
# ``server.py --env-check`` on the payload screen) to make the device match
|
||||
@@ -7247,6 +7301,9 @@ ROUTER.add('GET', r'/api/mode', h_mode_get)
|
||||
ROUTER.add('POST', r'/api/mode/release', h_mode_release)
|
||||
ROUTER.add('GET', r'/api/rfplan', h_rfplan_get)
|
||||
ROUTER.add('POST', r'/api/rfplan/role', h_rfplan_post)
|
||||
ROUTER.add('GET', r'/api/reliability/profiles', h_profiles_get)
|
||||
ROUTER.add('POST', r'/api/reliability/profile', h_profile_save)
|
||||
ROUTER.add('POST', r'/api/reliability/restore', h_profile_restore)
|
||||
|
||||
|
||||
def serve():
|
||||
|
||||
Reference in New Issue
Block a user