From 91134b19e483d5eecfa29775cdbee0d36357ee5f Mon Sep 17 00:00:00 2001 From: Gabriel Wong Date: Thu, 20 Jun 2019 14:34:57 +0800 Subject: [PATCH] Add README.md --- README.md | 64 ++++++++++++++++++++++++++++++++++ assets/architecture.drawio | 1 + assets/architecture.jpg | Bin 0 -> 66834 bytes hosts/database/setup/setup.md | 1 + services/requirements.txt | 2 ++ 5 files changed, 68 insertions(+) create mode 100644 README.md create mode 100644 assets/architecture.drawio create mode 100644 assets/architecture.jpg create mode 100644 services/requirements.txt diff --git a/README.md b/README.md new file mode 100644 index 0000000..93818b9 --- /dev/null +++ b/README.md @@ -0,0 +1,64 @@ +# EVS Notifications System +Nobody wants their aircon to switch off in the middle of the night when their credit runs out. + +The EVS notification system scrapes your credit balance daily. When your balance falls below a preset threshold, the system notifies you via Telegram bot. + +## Architecture +Click [here](assets/architecture.jpg) for an image of the system architecture. + +All operations involving data is done through individual corresponding APIs. + +### Components +* Postgres database +* Vue website for dashboard analytics +* Telegram bot + +### APIs +* CRUD operations for database +* GET operations only for dashboard +* Endpoint for fetching balance via web scraping +* Endpoint for sending one-time messages via Telegram bot + +### Daily-run services +* Scrape all user balances and add to database +* Retrieve all users to notify and send notifications + +## Pre-requisites +1. Python 3.6+ +1. Either: + * Postgres 9.5 + * Docker +1. NodeJS + +## Deployment +### Python +The following components use Python: +* APIs (Flask) +* Telegram bot (python-telegram-bot) +* Daily-run services + +All Python-based components have a `requirements.txt` file in their corresponding folder. + +### Vue dashboard +There is a corresponding README in the `dashboard` folder. A static site is bundled using Webpack and used for hosting. + +### Postgres +The database is run from a Docker container. To get a database up and running on your local machine: +``` +docker pull postgres:9.5 +docker run --rm -d \ + --name pg-docker \ + -e POSTGRES_USER=ubuntu \ + -e POSTGRES_PASSWORD=password \ + -e POSTGRES_DB=evs \ + -p 5432:5432 \ + -v $HOME/docker/volumes/postgres:/var/lib/postgresql/data \ + postgres:9.5 +``` + +Afterwards, to connect to the database: +``` +PGPASSWORD=docker psql -h localhost -U postgres -d evs +``` + +For first-time setup, run `\i create_tables.sql` to define database schema. \ No newline at end of file diff --git a/assets/architecture.drawio b/assets/architecture.drawio new file mode 100644 index 0000000..2cda17d --- /dev/null +++ b/assets/architecture.drawio @@ -0,0 +1 @@ +7Zttc6o4FMc/jS/bIQkCvmzt053p3emOnb23+2YnQsRskbghVr2ffhMIAoJKfQDdbd9ITkJIzv93YnKwHdSfLB45no6/M48EHWh4iw6660D5B6D8UJZlYgEri8+pp22ZYUB/EW00tHVGPRIVGgrGAkGnRaPLwpC4omDDnLN5sdmIBcWnTrFPSoaBi4Oy9Qf1xDixOtDO7E+E+uP0ycDqJTVD7L77nM1C/bwORKP4L6me4LQvPdFojD02z5nQfQf1OWMiuZos+iRQzk3dltz3sKF2NW5OQlHnhg/xNn69H9rBYzj/Dhc/u4tfoyut1QcOZiSdhhXI/m5HTHYrRy2W2lPWPzOWVlxFsY43soHpTBdZpbzy1ecTi0SUdiXHlPSW1KXmIa/TP4JV/WuXrm6GsRBETRXI6vmYCjKYYlfVziW50jYWk0BXr6QwZMFlE+rq60hw9k76LGA87hYZyHJ69qomJQSqcdIgSFuGLCR66A94QgMVDH8Q7uEQa7MGH0Fdzj3Dchxwi6QdB9QPpS0gIzVHzF19F1CD/iBcUMntjW4lmJpVgIckeGERFZQpqytpIDzX/HmtwYR6nnLabSTdQ0Nfz0aXXlWnd8DKLM/xYBJTGTlNoXoYWeRMGsFHwiZE8KVsomstHQ16uUiDY56FHjCsbmIc5+LOTFtiHe/+quuMeXmhsf9ECKAThcDNy7evCPiKgF0RYDrth4B5ohAYEP5BXfIVBl9hsCsMet1Gw8AM8J/G74O/nqH97f3WWM6f+t4VcCriYCNeChPGxZj5LJTeZYnDpPFvIsRSC4Zngq0hJzAXN2rjqkQKcBQp6BLzAw2yZuuYkTDdPQOY3pA3SCn48qca2HU3Lb7pccaFu0WhtNSlZIrEK22TS+JGbMZdssWBWi05Mp+ILe161WRwEmBBP4rjqFJZ3/rCaLw6pYeRNaSQvQZKMi591xorq2Hsj08FLcqrA13US8PBAJEFFTmZZektV5OJrArLvOJ7sFEb1hKLa6xWwJx2q/0iLbrHI0Pp1IQSGAdSedDaA52G4bH3ogfuj4+eQp4dYwM7ZeIyOkAdvI6IT68uPqhVfKxm8MlIsC+DhH1WyyPSA0BdfMw28UFGw6tPXgxjqxgbkQPnilwb+NitLj69Nr+7tuPT3sKzYcu1C9tj0oPqLj6wVXzshvGBe60+/7/Fx2zoOHfYob130Yf2aihr78c/tws7Ihx2y0d989p25IHfsXpdqwtNu3jyN9ZO/sl0Sif/cr+oew2BjXoAGSYy7Z5T6Ncym80ogMPfTVRnTX9jgo4o4fkMbDEnW0rVbg2pHWnWigxppzpdWAHjxgyiDeB1t6APAEY5iwhTWz6JCE6XRDw8mV6t2cCVfs0kuwCBoH2OAiFr9xeGeq8/3egB/VMEPEybG5/1DOiWPGOXHeM4zTqmitxKx6h3JaHANFQvGGKADvLVFpnKHmzPP/aJAvuVBMTneFJejIdMXFC4m706UDcc7d0TifbCIuFz9WrT8LDEG0fkgqSqt/40LFXV27fEo9EUh/tL9YMMY5Wi8ZBh7uVkSvo9X5kcdIYypTmpo4dUrNPFhJAF17WxUPvaGCfS5oGrVvI0e0EKodL28wwUgt2Sq06Z7Eqv4+zAKuu+K61QyClkia//cK6r9lu+Vl8SV6W6jhHddxe4gykd/s8guNOfvp/8iHABAjnNrr6ymP2UPsm/Zf+wgO7/BQ== \ No newline at end of file diff --git a/assets/architecture.jpg b/assets/architecture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e432f778321ab2068eea1fd467ecc43aae17c4f GIT binary patch literal 66834 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