Skip to content

Commit

Permalink
Merge pull request #24 from meedan/devops-471-logging-and-http
Browse files Browse the repository at this point in the history
DEVOPS-471 add logging and simultaneously run HTTP server
  • Loading branch information
DGaffney authored Aug 15, 2023
2 parents ebb299b + f38a125 commit 22cef39
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 6 deletions.
5 changes: 4 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
.PHONY: run run_http run_worker run_test

run: $(if $(filter http,$(RUN_MODE)),run_http,run_worker)
run:
uvicorn main:app --reload &
python run.py &
wait

run_http:
uvicorn main:app --reload
Expand Down
11 changes: 10 additions & 1 deletion lib/http.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,20 @@
from typing import Any, Dict
import httpx
from httpx import HTTPStatusError
from fastapi import FastAPI
from fastapi import FastAPI, Request
from pydantic import BaseModel
from lib.queue.queue import Queue
from lib.logger import logger

app = FastAPI()

@app.middleware("http")
async def log_requests(request: Request, call_next):
logger.info(f"Calling endpoint: {request.url.path}")
response = await call_next(request)
logger.info(f"Endpoint {request.url.path} returned: {response.status_code}")
return response

async def post_url(url: str, params: dict) -> Dict[str, Any]:
async with httpx.AsyncClient() as client:
try:
Expand Down
38 changes: 38 additions & 0 deletions lib/logger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import logging
import logging.config

LOGGING_CONFIG = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"default": {
"format": "{asctime} - {levelname} - {name} - {message}",
"style": "{",
}
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"formatter": "default",
}
},
"loggers": {
"uvicorn": {
"handlers": ["console"],
"level": "INFO",
},
"uvicorn.access": {
"handlers": ["console"],
"level": "INFO",
},
},
"root": {
"handlers": ["console"],
"level": "INFO",
}
}

logging.config.dictConfig(LOGGING_CONFIG)

# This provides an easily accessible logger for other modules
logger = logging.getLogger(__name__)
9 changes: 6 additions & 3 deletions lib/queue/queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

from lib.helpers import get_class, get_setting
from lib.model.model import Model
from lib.logger import logger

class Queue(ABC):
@classmethod
Expand All @@ -13,6 +14,7 @@ def create(cls, input_queue_name: str = None, output_queue_name: str = None, que
Instantiate a queue. Must pass queue_driver_name (i.e. sqs_queue.SQSQueue vs redis_queue.RedisQueue),
input_queue_name, output_queue_name, and batch_size. Pulls settings and then inits instance.
"""
logger.info(f"Starting queue with: ({input_queue_name}, {output_queue_name}, {queue_driver_name}, {batch_size})")
input_queue_name = get_setting(input_queue_name, "INPUT_QUEUE_NAME")
output_queue_name = get_setting(output_queue_name, "OUTPUT_QUEUE_NAME")
return get_class('lib.queue.', get_setting(queue_driver_name, "QUEUE_TYPE"))(input_queue_name, output_queue_name, batch_size)
Expand All @@ -38,10 +40,10 @@ def safely_respond(self, model: Model) -> Tuple[List[Dict[str, str]], List[Dict[
Return responses if no failure.
"""
messages = self.receive_messages(model.BATCH_SIZE)
try:
responses = []
if messages:
logger.info(f"About to respond to: ({messages})")
responses = model.respond(copy.deepcopy(messages))
except:
responses = []
return messages, responses

def fingerprint(self, model: Model):
Expand All @@ -53,6 +55,7 @@ def fingerprint(self, model: Model):
messages, responses = self.safely_respond(model)
if responses:
for message, response in zip(messages, responses):
logger.info(f"Processing message of: ({message}, {response})")
try:
self.return_response({"request": message, "response": response})
except:
Expand Down
2 changes: 1 addition & 1 deletion test/lib/queue/test_queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def test_create(self):
Queue.create('input', 'output', 'invalidqueue', 2)

def test_fingerprint(self):
self.queue.receive_messages = MagicMock(return_value=[schemas.TextInput(id="123", callback_url="http://example.com?callback=1", text="msg1")])
self.queue.receive_messages = MagicMock(return_value=[schemas.Message(body=schemas.TextInput(id="123", callback_url="http://example.com?callback=1", text="msg1"))])
self.queue.input_queue = MagicMock(return_value=None)
self.model.model = self.mock_model
self.model.model.encode = MagicMock(return_value=np.array([[4, 5, 6], [7, 8, 9]]))
Expand Down

0 comments on commit 22cef39

Please sign in to comment.