Skip to content

Commit

Permalink
Merge branch 'microservice' into fx-add-follow-state
Browse files Browse the repository at this point in the history
  • Loading branch information
khalifan-kfan committed Jun 28, 2024
2 parents 0eea964 + fa66a92 commit 524b673
Show file tree
Hide file tree
Showing 8 changed files with 121 additions and 7 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ jobs:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install --upgrade "pip<24.1"
pip install pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
Expand Down
35 changes: 35 additions & 0 deletions api_docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -724,6 +724,41 @@ paths:
500:
description: "Internal Server Error"

"/activity_feed":
get:
tags:
- activity_feed
consumes:
- application/json
produces:
- application/json
parameters:
- in: header
name: Authorization
required: true
description: "Bearer [token]"
- in: query
name: user_id
type: string
description: user id
- in: query
name: page
type: integer
description: Page number
- in: query
name: per_page
type: integer
description: Number of items per page
responses:
200:
description: "Success"
404:
description: "User not found"
400:
description: "Bad request"
500:
description: "Internal Server Error"

"/clusters":
post:
tags:
Expand Down
1 change: 1 addition & 0 deletions app/controllers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,4 @@
BillingInvoiceView, BillingInvoiceNotificationView)
from .system_status import SystemSummaryView
from .project_users import ProjectUsersView, ProjectUsersTransferView, ProjectUsersHandleInviteView, ProjectFollowingView
from .activity_feed import ActivityFeedView
67 changes: 67 additions & 0 deletions app/controllers/activity_feed.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
from app.models.app import App
from app.schemas.app import AppSchema
from app.schemas.project import ProjectSchema
from flask import current_app
from flask_restful import Resource, request
from app.models.user import User
from app.models.project import Project
import requests
from flask_jwt_extended import jwt_required, get_jwt_identity


class ActivityFeedView(Resource):
@jwt_required
def get(self):
current_user_id = get_jwt_identity()
current_user = User.get_by_id(current_user_id)
project_schema = ProjectSchema()
app_schema = AppSchema()

params = {
'general': True,
'operations': ['Create', 'Update', 'Delete'],
'statuses': ['Success'],
'models': ['Project', 'App', 'Database', ]
}
user_id = request.args.get('user_id', None)
if user_id:
user = User.get_by_id(user_id)
if not user:
return dict(status='fail', message='User not found'), 404
params['user_id'] = user_id

following = current_user.followed
if following:
params['user_ids'] = [user.id for user in following]

LOGGER_APP_URL = current_app.config.get('LOGGER_APP_URL')

user_feed = requests.get(
f"{LOGGER_APP_URL}/api/activities",
params=params,
headers={'Authorization': request.headers.get('Authorization')}
)

if user_feed.status_code != 200:
return dict(status='fail', message='Failed to fetch user feed'), 500

# get project or app details in each item in the feed and return them
user_feed = user_feed.json()
user_activities = user_feed.get('data').get('activity')
if not user_activities:
return dict(user_feed=user_feed), 200

for item in user_activities:
if item['model'] == 'Project':
project = Project.get_by_id(item['a_project_id'])
project_data, _ = project_schema.dump(project)
item['project'] = project_schema.dump(project_data)[0]
elif item['model'] == 'App':
app = App.get_by_id(item['a_app_id'])
app_data, _ = app_schema.dump(app)
item['app'] = app_schema.dump(app_data)[0]
elif item['model'] == 'Database':
pass
user_feed['data']['activity'] = user_activities

return dict(user_feed=user_feed), 200
2 changes: 1 addition & 1 deletion app/helpers/activity_logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def log_activity(model: str, status: str, operation: str, description: str, a_us
'operation': operation,
'model': model,
'status': status,
'description': description,
'description': str(description),
'a_user_id': str(a_user_id) if a_user_id else None,
'a_db_id': str(a_db_id) if a_db_id else None,
'a_app_id': str(a_app_id) if a_app_id else None,
Expand Down
3 changes: 2 additions & 1 deletion app/helpers/kube.py
Original file line number Diff line number Diff line change
Expand Up @@ -748,7 +748,8 @@ def enable_project(project: Project):
if e.status != 404:
log_activity('Project', status='Failed',
operation='Enable',
description=f'Error enabling the project. {e.body}',
description=f'''Error enabling the project. {
e.body}''',
a_project_id=project.id,
a_cluster_id=project.cluster_id)
return SimpleNamespace(
Expand Down
7 changes: 4 additions & 3 deletions app/routes/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from flask_restful import Api
from app.controllers import (
IndexView, UsersView, UserLoginView, OAuthView, DeploymentsView, RolesView, InActiveUsersView,ProjectPinView,
IndexView, UsersView, UserLoginView, OAuthView, DeploymentsView, RolesView, InActiveUsersView, ProjectPinView,
RolesDetailView, CreditAssignmentView, CreditAssignmentDetailView, CreditView, UserRolesView, UserDataSummaryView, ClustersView,
ClusterDetailView, ClusterNamespacesView,
ClusterNamespaceDetailView, ClusterNodesView, ClusterNodeDetailView,
Expand All @@ -14,7 +14,7 @@
UserAdminUpdateView, AppRevertView, ProjectGetCostsView, TransactionRecordView, CreditTransactionRecordView, CreditPurchaseTransactionRecordView,
BillingInvoiceView, BillingInvoiceNotificationView, SystemSummaryView, CreditDetailView, ProjectUsersView, ProjectUsersTransferView, AppReviseView,
ProjectUsersHandleInviteView, ClusterProjectsView, ProjectDisableView, ProjectEnableView, AppRedeployView, AppDisableView, AppEnableView,
UserDisableView, UserEnableView, AppDockerWebhookListenerView, UserFollowersView, UserFollowView, ProjectFollowingView)
UserDisableView, UserEnableView, AppDockerWebhookListenerView, UserFollowersView, UserFollowView, ProjectFollowingView, ActivityFeedView)
from app.controllers.app import AppRevisionsView
from app.controllers.billing_invoice import BillingInvoiceDetailView
from app.controllers.receipts import BillingReceiptsDetailView, BillingReceiptsView
Expand Down Expand Up @@ -46,7 +46,8 @@
api.add_resource(UserFollowView, '/users/<string:user_id>/following')
api.add_resource(UserFollowersView, '/users/<string:user_id>/followers')


# Activity Feed
api.add_resource(ActivityFeedView, '/activity_feed')
# Deployments
api.add_resource(DeploymentsView, '/deployments', endpoint='deployments')

Expand Down
11 changes: 10 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,9 @@ services:
dockerfile: Dockerfile
image: ckwagaba/osprey-backend:latest
container_name: flask-api
networks:
- cranecloud
- default
environment:
KUBE_HOST:
KUBE_TOKEN:
Expand All @@ -58,6 +61,7 @@ services:
DATABASE_USER: postgres
DATABASE_URI: ${DATABASE_URI:-postgresql://postgres:postgres@database:5432/cranecloud}
TEST_DATABASE_URI: ${TEST_DATABASE_URI:-postgresql://postgres:postgres@database:5432/cranecloud_test}
LOGGER_APP_URL: http://app-logger:8000
ports:
- "${FLASK_PORT:-5000}:5000"
develop:
Expand Down Expand Up @@ -87,7 +91,7 @@ services:
MONGO_URI: mongodb://crane:password@crane-mongo-db:27017/admin
DATABASE_URI: postgresql://postgres:postgres@database:5432/cranecloud
ports:
- "4500:5000"
- "${CELERY_PORT:-4500}:5000"
volumes:
- .:/app
links:
Expand All @@ -98,3 +102,8 @@ volumes:
db-data:
cranemongodbdata:
craneredisdbdata:

networks:
cranecloud:
external: true
name: cranecloud_default

0 comments on commit 524b673

Please sign in to comment.