252 lines
9.5 KiB
Python
252 lines
9.5 KiB
Python
from typing import Union
|
|
|
|
import schemas
|
|
from chalicelib.core.metrics import custom_metrics, dashboards
|
|
from fastapi import Body, Depends
|
|
from or_dependencies import OR_context
|
|
from routers.base import get_routers
|
|
|
|
public_app, app, app_apikey = get_routers()
|
|
|
|
|
|
@app.post("/{projectId}/dashboards", tags=["dashboard"])
|
|
def create_dashboards(projectId: int, data: schemas.CreateDashboardSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
return dashboards.create_dashboard(
|
|
project_id=projectId, user_id=context.user_id, data=data
|
|
)
|
|
|
|
|
|
@app.get("/{projectId}/dashboards", tags=["dashboard"])
|
|
def get_dashboards(projectId: int, context: schemas.CurrentContext = Depends(OR_context)):
|
|
return {
|
|
"data": dashboards.get_dashboards(project_id=projectId, user_id=context.user_id)
|
|
}
|
|
|
|
|
|
@app.get("/{projectId}/dashboards/{dashboardId}", tags=["dashboard"])
|
|
def get_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentContext = Depends(OR_context)):
|
|
data = dashboards.get_dashboard(
|
|
project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId
|
|
)
|
|
if data is None:
|
|
return {"errors": ["dashboard not found"]}
|
|
return {"data": data}
|
|
|
|
|
|
@app.put("/{projectId}/dashboards/{dashboardId}", tags=["dashboard"])
|
|
def update_dashboard(projectId: int, dashboardId: int, data: schemas.EditDashboardSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
return {
|
|
"data": dashboards.update_dashboard(
|
|
project_id=projectId,
|
|
user_id=context.user_id,
|
|
dashboard_id=dashboardId,
|
|
data=data,
|
|
)
|
|
}
|
|
|
|
|
|
@app.delete("/{projectId}/dashboards/{dashboardId}", tags=["dashboard"])
|
|
def delete_dashboard(projectId: int, dashboardId: int, _=Body(None),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
return dashboards.delete_dashboard(
|
|
project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId
|
|
)
|
|
|
|
|
|
@app.get("/{projectId}/dashboards/{dashboardId}/pin", tags=["dashboard"])
|
|
def pin_dashboard(projectId: int, dashboardId: int, context: schemas.CurrentContext = Depends(OR_context)):
|
|
return {
|
|
"data": dashboards.pin_dashboard(
|
|
project_id=projectId, user_id=context.user_id, dashboard_id=dashboardId
|
|
)
|
|
}
|
|
|
|
|
|
@app.post("/{projectId}/dashboards/{dashboardId}/cards", tags=["cards"])
|
|
def add_card_to_dashboard(projectId: int, dashboardId: int, data: schemas.AddWidgetToDashboardPayloadSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
return {
|
|
"data": dashboards.add_widget(
|
|
project_id=projectId,
|
|
user_id=context.user_id,
|
|
dashboard_id=dashboardId,
|
|
data=data,
|
|
)
|
|
}
|
|
|
|
|
|
@app.post("/{projectId}/dashboards/{dashboardId}/metrics", tags=["dashboard"])
|
|
# @app.put('/{projectId}/dashboards/{dashboardId}/metrics', tags=["dashboard"])
|
|
def create_metric_and_add_to_dashboard(projectId: int, dashboardId: int, data: schemas.CardSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
return {
|
|
"data": dashboards.create_metric_add_widget(
|
|
project=context.project,
|
|
user_id=context.user_id,
|
|
dashboard_id=dashboardId,
|
|
data=data,
|
|
)
|
|
}
|
|
|
|
|
|
@app.put("/{projectId}/dashboards/{dashboardId}/widgets/{widgetId}", tags=["dashboard"])
|
|
def update_widget_in_dashboard(projectId: int, dashboardId: int, widgetId: int,
|
|
data: schemas.UpdateWidgetPayloadSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
return dashboards.update_widget(
|
|
project_id=projectId,
|
|
user_id=context.user_id,
|
|
dashboard_id=dashboardId,
|
|
widget_id=widgetId,
|
|
data=data,
|
|
)
|
|
|
|
|
|
@app.delete("/{projectId}/dashboards/{dashboardId}/widgets/{widgetId}", tags=["dashboard"])
|
|
def remove_widget_from_dashboard(projectId: int, dashboardId: int, widgetId: int, _=Body(None),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
return dashboards.remove_widget(
|
|
project_id=projectId,
|
|
user_id=context.user_id,
|
|
dashboard_id=dashboardId,
|
|
widget_id=widgetId,
|
|
)
|
|
|
|
|
|
@app.post("/{projectId}/cards/try", tags=["cards"])
|
|
def try_card(projectId: int, data: schemas.CardSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
return {
|
|
"data": custom_metrics.get_chart(
|
|
project=context.project, data=data, user_id=context.user_id
|
|
)
|
|
}
|
|
|
|
|
|
@app.post("/{projectId}/cards/try/sessions", tags=["cards"])
|
|
def try_card_sessions(projectId: int, data: schemas.CardSessionsSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
data = custom_metrics.get_sessions(
|
|
project=context.project, user_id=context.user_id, data=data
|
|
)
|
|
return {"data": data}
|
|
|
|
|
|
@app.post("/{projectId}/cards/try/issues", tags=["cards"])
|
|
def try_card_issues(projectId: int, data: schemas.CardSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
return {
|
|
"data": custom_metrics.get_issues(
|
|
project=context.project, user_id=context.user_id, data=data
|
|
)
|
|
}
|
|
|
|
|
|
@app.get("/{projectId}/cards", tags=["cards"])
|
|
def get_cards(projectId: int, context: schemas.CurrentContext = Depends(OR_context)):
|
|
return {
|
|
"data": custom_metrics.get_all(project_id=projectId, user_id=context.user_id)
|
|
}
|
|
|
|
|
|
@app.post("/{projectId}/cards", tags=["cards"])
|
|
def create_card(projectId: int, data: schemas.CardSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
return custom_metrics.create_card(
|
|
project=context.project, user_id=context.user_id, data=data
|
|
)
|
|
|
|
|
|
@app.post("/{projectId}/cards/search", tags=["cards"])
|
|
def search_cards(projectId: int, data: schemas.MetricSearchSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
return {
|
|
"data": custom_metrics.search_metrics(
|
|
project_id=projectId, user_id=context.user_id, data=data
|
|
)
|
|
}
|
|
|
|
|
|
@app.get("/{projectId}/cards/{metric_id}", tags=["cards"])
|
|
def get_card(projectId: int, metric_id: Union[int, str], context: schemas.CurrentContext = Depends(OR_context)):
|
|
if metric_id.isnumeric():
|
|
metric_id = int(metric_id)
|
|
else:
|
|
return {"errors": ["invalid card_id"]}
|
|
data = custom_metrics.get_card(
|
|
project_id=projectId, user_id=context.user_id, metric_id=metric_id
|
|
)
|
|
if data is None:
|
|
return {"errors": ["card not found"]}
|
|
return {"data": data}
|
|
|
|
|
|
@app.post("/{projectId}/cards/{metric_id}/sessions", tags=["cards"])
|
|
def get_card_sessions(projectId: int, metric_id: int, data: schemas.CardSessionsSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
data = custom_metrics.get_sessions_by_card_id(
|
|
project=context.project, user_id=context.user_id, metric_id=metric_id, data=data
|
|
)
|
|
if data is None:
|
|
return {"errors": ["custom metric not found"]}
|
|
return {"data": data}
|
|
|
|
|
|
@app.post("/{projectId}/cards/{metric_id}/issues/{issueId}/sessions", tags=["dashboard"])
|
|
def get_metric_funnel_issue_sessions(projectId: int, metric_id: int, issueId: str,
|
|
data: schemas.CardSessionsSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
data = custom_metrics.get_funnel_sessions_by_issue(
|
|
project_id=projectId,
|
|
user_id=context.user_id,
|
|
metric_id=metric_id,
|
|
issue_id=issueId,
|
|
data=data,
|
|
)
|
|
if data is None:
|
|
return {"errors": ["custom metric not found"]}
|
|
return {"data": data}
|
|
|
|
|
|
@app.post("/{projectId}/cards/{metric_id}/chart", tags=["card"])
|
|
def get_card_chart(projectId: int, metric_id: int, data: schemas.CardSessionsSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
data = custom_metrics.make_chart_from_card(
|
|
project=context.project, user_id=context.user_id, metric_id=metric_id, data=data
|
|
)
|
|
return {"data": data}
|
|
|
|
|
|
@app.post("/{projectId}/cards/{metric_id}", tags=["dashboard"])
|
|
def update_card(projectId: int, metric_id: int, data: schemas.CardSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
data = custom_metrics.update_card(
|
|
project_id=projectId, user_id=context.user_id, metric_id=metric_id, data=data
|
|
)
|
|
if data is None:
|
|
return {"errors": ["custom metric not found"]}
|
|
return {"data": data}
|
|
|
|
|
|
@app.post("/{projectId}/cards/{metric_id}/status", tags=["dashboard"])
|
|
def update_card_state(projectId: int, metric_id: int, data: schemas.UpdateCardStatusSchema = Body(...),
|
|
context: schemas.CurrentContext = Depends(OR_context)):
|
|
return {
|
|
"data": custom_metrics.change_state(
|
|
project_id=projectId,
|
|
user_id=context.user_id,
|
|
metric_id=metric_id,
|
|
status=data.active,
|
|
)
|
|
}
|
|
|
|
|
|
@app.delete("/{projectId}/cards/{metric_id}", tags=["dashboard"])
|
|
def delete_card(projectId: int, metric_id: int, _=Body(None), context: schemas.CurrentContext = Depends(OR_context)):
|
|
return {
|
|
"data": custom_metrics.delete_card(
|
|
project_id=projectId, user_id=context.user_id, metric_id=metric_id
|
|
)
|
|
}
|