feat(api): add /api/version/ endpoint for Fleet Management and Docker build metadata
This commit is contained in:
parent
aad07929b9
commit
4d0682efc1
3 changed files with 68 additions and 0 deletions
|
|
@ -46,6 +46,13 @@ ENV PROJ_DATA=/opt/conda/envs/loko-env/share/proj
|
||||||
# Argument de build pour activer l'installation des librairies IA (ultralytics, OpenCV...)
|
# Argument de build pour activer l'installation des librairies IA (ultralytics, OpenCV...)
|
||||||
# Passer INSTALL_AI_LIBS=true dans le docker-compose pour les inclure
|
# Passer INSTALL_AI_LIBS=true dans le docker-compose pour les inclure
|
||||||
ARG INSTALL_AI_LIBS=false
|
ARG INSTALL_AI_LIBS=false
|
||||||
|
ARG GIT_COMMIT=unknown
|
||||||
|
ARG BUILD_DATE=unknown
|
||||||
|
ARG LOKO_VERSION=1.0.0
|
||||||
|
|
||||||
|
ENV GIT_COMMIT_SHA=${GIT_COMMIT}
|
||||||
|
ENV BUILD_DATE=${BUILD_DATE}
|
||||||
|
ENV LOKO_VERSION=${LOKO_VERSION}
|
||||||
|
|
||||||
# Copie et installation des dépendances Python
|
# Copie et installation des dépendances Python
|
||||||
COPY requirements/ /app/requirements/
|
COPY requirements/ /app/requirements/
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
from django.urls import path, re_path, include
|
from django.urls import path, re_path, include
|
||||||
|
from .views_version import VersionInfoView
|
||||||
from .views import (
|
from .views import (
|
||||||
GeoProxyView,
|
GeoProxyView,
|
||||||
InterventionListCreateView,
|
InterventionListCreateView,
|
||||||
|
|
@ -10,6 +11,7 @@ from .views import (
|
||||||
app_name = "zapi"
|
app_name = "zapi"
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
path("version/", VersionInfoView.as_view(), name="system-version"),
|
||||||
# API root (optionnel: une vue d'info/health)
|
# API root (optionnel: une vue d'info/health)
|
||||||
# path("", APIRootView.as_view(), name="root"),
|
# path("", APIRootView.as_view(), name="root"),
|
||||||
|
|
||||||
|
|
|
||||||
59
loko/api/views_version.py
Normal file
59
loko/api/views_version.py
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
import subprocess
|
||||||
|
from django.http import JsonResponse
|
||||||
|
from django.utils import timezone
|
||||||
|
from rest_framework.views import APIView
|
||||||
|
from rest_framework.permissions import AllowAny
|
||||||
|
|
||||||
|
|
||||||
|
def get_version_info():
|
||||||
|
version = os.environ.get('LOKO_VERSION', '1.0.0')
|
||||||
|
commit_sha = os.environ.get('GIT_COMMIT_SHA') or os.environ.get('GIT_COMMIT')
|
||||||
|
branch = os.environ.get('GIT_BRANCH', 'main')
|
||||||
|
build_date = os.environ.get('BUILD_DATE')
|
||||||
|
|
||||||
|
if not commit_sha:
|
||||||
|
for possible_path in ['/app/build_info.json', 'build_info.json']:
|
||||||
|
if os.path.exists(possible_path):
|
||||||
|
try:
|
||||||
|
with open(possible_path, 'r', encoding='utf-8') as f:
|
||||||
|
data = json.load(f)
|
||||||
|
commit_sha = data.get('git_commit') or data.get('commit_sha')
|
||||||
|
version = data.get('version', version)
|
||||||
|
branch = data.get('branch', branch)
|
||||||
|
build_date = data.get('build_date', build_date)
|
||||||
|
break
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if not commit_sha:
|
||||||
|
try:
|
||||||
|
commit_sha = subprocess.check_output(
|
||||||
|
['git', 'rev-parse', 'HEAD'],
|
||||||
|
stderr=subprocess.DEVNULL,
|
||||||
|
timeout=1
|
||||||
|
).decode('utf-8').strip()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
commit_short = commit_sha[:7] if commit_sha else None
|
||||||
|
|
||||||
|
return {
|
||||||
|
'status': 'online',
|
||||||
|
'app': 'loko',
|
||||||
|
'version': version,
|
||||||
|
'git_commit': commit_sha,
|
||||||
|
'git_commit_short': commit_short,
|
||||||
|
'branch': branch,
|
||||||
|
'build_date': build_date,
|
||||||
|
'timestamp': timezone.now().isoformat()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class VersionInfoView(APIView):
|
||||||
|
permission_classes = [AllowAny]
|
||||||
|
authentication_classes = []
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
return JsonResponse(get_version_info())
|
||||||
Loading…
Reference in a new issue