Compare commits

...

2 Commits

Author SHA1 Message Date
NarayanBavisetti
4ef82bad22 feat: storing logs in mongodb 2024-02-16 12:56:11 +05:30
Anmol Singh Bhatia
7628419a26 fix: inbox description and mutation (#3677)
* fix: inbox status mutation fix

* fix: inbox description fix

* chore: added description in inbox issue

---------

Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
2024-02-15 19:31:38 +05:30
9 changed files with 84 additions and 24 deletions

View File

@@ -31,3 +31,5 @@ USE_MINIO=1
# Nginx Configuration
NGINX_PORT=80
MONGO_DB_URL="mongodb://plane-mongodb:27017/"

View File

@@ -27,7 +27,7 @@ from plane.app.serializers import (
InboxSerializer,
InboxIssueSerializer,
IssueCreateSerializer,
IssueStateInboxSerializer,
IssueDetailSerializer,
)
from plane.utils.issue_filters import issue_filters
from plane.bgtasks.issue_activites_task import issue_activity
@@ -333,7 +333,7 @@ class InboxIssueViewSet(BaseViewSet):
def retrieve(self, request, slug, project_id, inbox_id, issue_id):
issue = self.get_queryset().filter(pk=issue_id).first()
serializer = IssueSerializer(issue, expand=self.expand,)
serializer = IssueDetailSerializer(issue, expand=self.expand,)
return Response(serializer.data, status=status.HTTP_200_OK)
def destroy(self, request, slug, project_id, inbox_id, issue_id):

View File

@@ -0,0 +1,23 @@
from pymongo import MongoClient
def singleton(cls):
instances = {}
def wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
@singleton
class Database:
db = None
client = None
def __init__(self, mongo_uri, database_name):
self.client = MongoClient(mongo_uri)
self.db = self.client[database_name]
def get_db(self):
return self.db

View File

@@ -1,9 +1,14 @@
from plane.db.models import APIToken, APIActivityLog
# Python imports
import os
# Django imports
from plane.db.mongodb import Database
class APITokenLogMiddleware:
def __init__(self, get_response):
self.get_response = get_response
self.database = Database(os.environ.get("MONGO_DB_URL"), "plane")
def __call__(self, request):
request_body = request.body
@@ -17,23 +22,31 @@ class APITokenLogMiddleware:
# If the API key is present, log the request
if api_key:
try:
APIActivityLog.objects.create(
token_identifier=api_key,
path=request.path,
method=request.method,
query_params=request.META.get("QUERY_STRING", ""),
headers=str(request.headers),
body=(
request_body.decode("utf-8") if request_body else None
),
response_body=(
response.content.decode("utf-8")
if response.content
else None
),
response_code=response.status_code,
ip_address=request.META.get("REMOTE_ADDR", None),
user_agent=request.META.get("HTTP_USER_AGENT", None),
db = self.database.get_db()
collection = db["api_activity_logs"]
_ = collection.insert_one(
{
"token_identifier": api_key,
"path": request.path,
"method": request.method,
"query_params": request.META.get("QUERY_STRING", ""),
"headers": str(request.headers),
"body": (
request_body.decode("utf-8")
if request_body
else None
),
"response_body": (
response.content.decode("utf-8")
if response.content
else None
),
"response_code": response.status_code,
"ip_address": request.META.get("REMOTE_ADDR", None),
"user_agent": request.META.get(
"HTTP_USER_AGENT", None
),
}
)
except Exception as e:

View File

@@ -33,4 +33,4 @@ posthog==3.0.2
cryptography==42.0.0
lxml==4.9.3
boto3==1.28.40
pymongo==4.6.1

View File

@@ -55,6 +55,7 @@ x-app-env : &app-env
- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD:-"secret-key"}
- BUCKET_NAME=${BUCKET_NAME:-uploads}
- FILE_SIZE_LIMIT=${FILE_SIZE_LIMIT:-5242880}
- MONGO_DB_URL=${MONGO_DB_URL:-"mongodb://plane-mongodb:27017/"}
@@ -138,6 +139,14 @@ services:
command: postgres -c 'max_connections=1000'
volumes:
- pgdata:/var/lib/postgresql/data
plane-mongodb:
<<: *app-env
image: mongo:7.0.5
pull_policy: if_not_present
restart: unless-stopped
volumes:
- mongodbdata:/data/db
plane-redis:
<<: *app-env
@@ -172,3 +181,4 @@ volumes:
pgdata:
redisdata:
uploads:
mongodbdata:

View File

@@ -8,6 +8,7 @@ volumes:
redisdata:
uploads:
pgdata:
mongodbdata:
services:
@@ -45,6 +46,16 @@ services:
- .env
environment:
PGDATA: /var/lib/postgresql/data
plane-mongodb:
image: mongo:7.0.5
restart: unless-stopped
networks:
- dev_env
volumes:
- mongodbdata:/data/db
env_file:
- .env
web:
build:

View File

@@ -1,4 +1,5 @@
import React from "react";
import { observer } from "mobx-react";
// hooks
import { useInboxIssues } from "hooks/store";
// constants
@@ -13,7 +14,7 @@ type Props = {
showDescription?: boolean;
};
export const InboxIssueStatus: React.FC<Props> = (props) => {
export const InboxIssueStatus: React.FC<Props> = observer((props) => {
const { workspaceSlug, projectId, inboxId, issueId, iconSize = 18, showDescription = false } = props;
// hooks
const {
@@ -52,4 +53,4 @@ export const InboxIssueStatus: React.FC<Props> = (props) => {
)}
</div>
);
};
});

View File

@@ -108,7 +108,7 @@ export const IssueDescriptionForm: FC<IssueDetailsProps> = observer((props) => {
description_html: issue.description_html === "" ? "<p></p>" : issue.description_html,
});
setLocalTitleValue(issue.name);
}, [issue, reset]);
}, [issue, issue.description_html, reset]);
// ADDING handleDescriptionFormSubmit TO DEPENDENCY ARRAY PRODUCES ADVERSE EFFECTS
// TODO: Verify the exhaustive-deps warning