Commit 37ce9bd1 authored by arjun.b's avatar arjun.b

publisher

parents
MQTT_HOST=192.168.0.220
PORT=1883
FILE_PATH=scripts/external/logging_error.log
\ No newline at end of file
# Default ignored files
/shelf/
/workspace.xml
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
<option name="ignoredErrors">
<list>
<option value="N801" />
</list>
</option>
</inspection_tool>
</profile>
</component>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (publisher) (2)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/publisher.iml" filepath="$PROJECT_DIR$/.idea/publisher.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
import uvicorn
from scripts.logging.logging import logger
if __name__ == "__main__":
try:
uvicorn.run("main:app", port=8765)
except Exception as e:
logger.error(e)
print(e)
import uvicorn
from fastapi import FastAPI
from scripts.logging.logging import logger
from scripts.services.publisher import publish
app = FastAPI()
app.include_router(publish)
if __name__ == "__main__":
try:
uvicorn.run(app, port=8765)
except Exception as e:
logger.error(e)
print(e)
from dotenv import load_dotenv
import os
try:
load_dotenv()
host = os.getenv("MQTT_HOST")
port_no = os.getenv("PORT")
file_name = os.getenv("FILE_PATH")
except Exception as e:
print(e)
\ No newline at end of file
class EndPoints:
root = "/"
publish = "/publish_data"
import json
import time
import paho.mqtt.client as mqtt
from scripts.config.application_config import host, port_no
from scripts.database.model.model import SitesEncoder
from scripts.logging.logging import logger
class MqttHandler:
@staticmethod
def data_publish(data):
try:
client = mqtt.Client()
client.connect(host, int(port_no), 60)
topic = "site"
time.sleep(10)
client.publish(topic, json.dumps(data, cls=SitesEncoder))
except Exception as e:
logger.error(e)
print(e)
import json
from pydantic import BaseModel
class Site(BaseModel):
PM10: int
PM2_5: int
SO2: int
NO2: int
class DataModel(BaseModel):
data: Site
site_id: str
data_quality: int
class SitesEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, Site):
return obj.dict()
return super().default(obj)
2023-02-20 14:58:42 - ERROR - [AnyIO worker thread:data_publish():16] - Object of type DataModel is not JSON serializable
2023-02-20 15:04:13 - ERROR - [AnyIO worker thread:data_publish():17] - Object of type DataModel is not JSON serializable
2023-02-20 15:05:26 - ERROR - [AnyIO worker thread:data_publish():17] - Object of type DataModel is not JSON serializable
2023-02-20 15:06:20 - ERROR - [AnyIO worker thread:data_publish():17] - dump() missing 1 required positional argument: 'fp'
2023-02-20 15:07:02 - ERROR - [AnyIO worker thread:data_publish():17] - Object of type DataModel is not JSON serializable
2023-02-20 15:10:03 - ERROR - [AnyIO worker thread:data_publish():17] - Object of type DataModel is not JSON serializable
2023-02-20 15:11:13 - ERROR - [AnyIO worker thread:data_publish():17] - Object of type DataModel is not JSON serializable
import logging
import os
from logging.handlers import RotatingFileHandler
from scripts.config.application_config import file_name
def get_logger():
"""
Creates a rotating log
"""
__logger__ = logging.getLogger('')
__logger__.setLevel("ERROR")
log_formatter = '%(asctime)s - %(levelname)-6s - [%(threadName)5s:%(funcName)5s():%(lineno)s] - %(message)s'
time_format = "%Y-%m-%d %H:%M:%S"
formatter = logging.Formatter(log_formatter, time_format)
log_file = os.path.join(f"{file_name}_ERROR.log")
temp_handler = RotatingFileHandler(log_file,
maxBytes=100000000,
backupCount=5)
temp_handler.setFormatter(formatter)
__logger__.addHandler(temp_handler)
return __logger__
logger = get_logger()
from fastapi import APIRouter
from scripts.constants.endpoints import EndPoints
from scripts.core.handlers.publish_data import MqttHandler
from scripts.database.model.model import DataModel
from scripts.logging.logging import logger
publish = APIRouter()
@publish.get("/")
def root():
return {"data": "API is working"}
@publish.post(EndPoints.publish, tags=["publish the data"])
def data_publish(details: DataModel):
try:
MqttHandler.data_publish(dict(details))
return {"data": "data published"}
except Exception as e:
print(e)
logger.error(e)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment