Skip to content

Commit

Permalink
+ endpoint /metrics/vessels-in-activity start_at|end_at|limit|order_by
Browse files Browse the repository at this point in the history
  • Loading branch information
herve.le-bars committed Oct 5, 2024
1 parent b67533e commit a1a641b
Showing 1 changed file with 54 additions and 6 deletions.
60 changes: 54 additions & 6 deletions backend/bloom/routers/metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,65 @@
from bloom.config import settings
from bloom.container import UseCases
from pydantic import BaseModel, Field
from typing_extensions import Annotated, Literal
from datetime import datetime
from typing_extensions import Annotated, Literal, Optional
from datetime import datetime, timedelta
from sqlalchemy import select, func, and_, or_
from bloom.infra.database import sql_model
from bloom.domain.segment import Segment
from bloom.infra.repositories.repository_segment import SegmentRepository
import json
from pydantic import BaseModel, ConfigDict

router = APIRouter()
redis_client = Redis(host=settings.redis_host, port=settings.redis_port, db=0)

@router.get("/metrics/vessels-in-activity/total", tags=['metrics'])
def read_metrics_vessels_in_activity_total(start_at: datetime, end_at: datetime = None):
pass

@router.get("/metrics/zone-visited/total", tags=['metrics'])
class QuerySchema(BaseModel):
id: int
mmsi: int
total_time_at_sea: timedelta

@router.get("/metrics/vessels-in-activity",
response_model=list[QuerySchema],
tags=['metrics'])
def read_metrics_vessels_in_activity_total(start_at: datetime,
end_at: datetime = datetime.now(),
limit: int = None,
order_by: str = 'DESC'
):
use_cases = UseCases()
db = use_cases.db()
with db.session() as session:
stmt=select(sql_model.Vessel.id,
sql_model.Vessel.mmsi,
func.sum(sql_model.Excursion.total_time_at_sea).label("total_time_at_sea")
)\
.select_from(sql_model.Segment)\
.join(sql_model.Excursion, sql_model.Segment.excursion_id == sql_model.Excursion.id)\
.join(sql_model.Vessel, sql_model.Excursion.vessel_id == sql_model.Vessel.id)\
.where(
or_(
sql_model.Excursion.arrival_at.between(start_at,end_at),
and_(sql_model.Excursion.departure_at <= end_at,
sql_model.Excursion.arrival_at == None))
)\
.group_by(sql_model.Vessel.id,sql_model.Excursion.total_time_at_sea)
stmt = stmt.limit(limit) if limit != None else stmt

stmt = stmt.order_by(sql_model.Excursion.total_time_at_sea.asc())\
if order_by.upper() == 'ASC' \
else stmt.order_by(sql_model.Excursion.total_time_at_sea.desc())

print(stmt)
"""result=[QuerySchema(id=s.id,
mmsi = s.mmsi,
total_time_at_sea= s.total_time_at_sea
) for s in session.execute(stmt).all()]"""

return session.execute(stmt).all()

@router.get("/metrics/zone-visited/total",
tags=['metrics'] )
def read_metrics_vessels_in_activity_total(start_at: datetime, end_at: datetime = None):
pass

Expand Down

0 comments on commit a1a641b

Please sign in to comment.