userSimulator.py 2.7 KB
import sys
import os
import datetime
import time
import json
import requests
from requests.auth import HTTPBasicAuth

class UserSimulator():
    conf_file = "../config/conf.json"
    conf_path = "../config/"
    request_path = "../resources/"
    login = "http://localhost:8000/user_manager/login"
    url = "http://localhost:8000/routine_manager/import_request"
    get_url = "http://localhost:8000/routine_manager/"
    sims = []
    ended = 0

    def userPrint(self, string: str):
        print("UserSimulator : " + string)

    def __init__(self, argv):
        if (len(argv) > 1):
            self.conf_file = self.conf_path + argv[1]
            print("conf_file = " + self.conf_file)
        else:
            self.userPrint("Using the default configuration file : conf.json")

    def parse(self):
        try:
            json_data = open(self.conf_file, 'r')
        except IOError:
            self.userPrint("Configuration file not found")
            sys.exit(0)
        json_content = json.loads(json_data.read())
        for dic in json_content:
            for key, value in dic.items():
                if (key == "userSimulator"):
                    self.sims.append(dic)
                    self.ended = max(dic["time"], self.ended)
        return (0)

    def sendRequest(self, file_name: str):
        files = {'request_file' : open(self.request_path + file_name, 'rb')}
        r = self.client.post(self.url, files=files)
        if (r.status_code == 200):
            self.userPrint("The request has been successfully sent")
        else:
            self.userPrint("Sending request failed %d"%(r.status_code))
        return (0)

    def authenticate(self):
        self.client = requests.session()
        try:
            self.client.get("http://localhost:8000/user_manager/login")
            csrftoken = self.client.cookies['csrftoken']
            self.logindata = dict(email="pyros", password="DjangoPyros", csrfmiddlewaretoken=csrftoken)
            resp = self.client.post(self.login, data=self.logindata, headers=dict(Referer=self.login))
            self.userPrint("Connection status : %d"%(resp.status_code))
        except Exception as e:
            print(e, file=sys.stderr)
            return 1
        return 0

    def run(self):
        i = 0
        self.parse()
        if self.authenticate():
            return 1
        self.userPrint("The simulator will end in %d seconds"%(int(self.ended)))
        while (i < self.ended):
            for dic in self.sims:
                if (int(dic["time"]) == i):
                    self.sendRequest(dic["userSimulator"])
            i += 1
            time.sleep(1)
        return (0)

if (__name__ == "__main__"):
    sim = UserSimulator(sys.argv)
    sys.exit(sim.run())