| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- import datetime
- import time
- import random
- import os
- import pandas as pd
- from sms import prepare_sms
- LOCK_PATH = "output\\alarms.lock"
- ALARM_DB = "output\\alarms.feather"
- WAIT_FOR_NEXT_MESSAGE = 60
- def process_dataframe(df):
- now = datetime.datetime.now()
- records = df.to_dict("records")
- for alarm in records:
- if (~alarm["is_sent"]) & (alarm["time"] < now):
- try:
- prepare_sms(alarm["phone_number"], alarm["content"], True)
- # Update alarms status
- alarm["is_sent"] = True
- # print("SMS send to " + alarm["phone_number"])
- # sleep to avoid reaching
- time.sleep(random.randint(1, 8))
- except Exception as exp:
- print(
- "Echec lors de l'envoie du SMS au " + alarm["phone_number"],
- exp,
- )
- # Transform back the data into dataframe
- return pd.DataFrame.from_dict(records)
- def main():
- if os.path.exists(LOCK_PATH):
- print("The program is already running")
- else:
- # Touch the Lock File
- with open(LOCK_PATH, "w") as f:
- f.write("")
- try:
- # Read data from database
- df = pd.read_feather(ALARM_DB)
- completion = df.is_sent.mean()
- print(f"Message send {completion*100:02.0f}%")
- try:
- while True:
- df = process_dataframe(df)
- df.to_feather(ALARM_DB)
- now = datetime.datetime.now()
- sms_sent = df.is_sent.mean()
- if sms_sent > completion:
- print(f"Message send {sms_sent*100:02.0f}%")
- completion = sms_sent
- if completion == 1:
- break
- delta = df[~df.is_sent].time.min() - now
- time.sleep(delta.total_seconds() + 1)
- except KeyboardInterrupt:
- pass
- finally:
- df.to_feather(ALARM_DB)
- finally:
- print("The program is done")
- # Remove the lock file
- os.remove(LOCK_PATH)
- if __name__ == "__main__":
- main()
|