1
0
mirror of https://github.com/muety/wakapi.git synced 2023-08-10 21:12:56 +03:00

fix: sample data script

This commit is contained in:
Ferdinand Mütsch 2020-10-11 09:55:01 +02:00
parent dd50b4076f
commit efd4764728

View File

@ -1,14 +1,15 @@
#!/usr/bin/python3 #!/usr/bin/python3
import argparse
import base64
import random import random
import string import string
import sys import sys
from datetime import datetime, timedelta from datetime import datetime, timedelta
from typing import List, NoneType from typing import List, Union
import requests import requests
from tqdm import tqdm
N_PROJECTS = 5
N_PAST_HOURS = 24
UA = 'wakatime/13.0.7 (Linux-4.15.0-91-generic-x86_64-with-glibc2.4) Python3.8.0.final.0 vscode/1.42.1 vscode-wakatime/4.0.0' UA = 'wakatime/13.0.7 (Linux-4.15.0-91-generic-x86_64-with-glibc2.4) Python3.8.0.final.0 vscode/1.42.1 vscode-wakatime/4.0.0'
LANGUAGES = { LANGUAGES = {
'Go': 'go', 'Go': 'go',
@ -36,13 +37,13 @@ class Heartbeat:
self.is_write: bool = is_write self.is_write: bool = is_write
self.branch: str = branch self.branch: str = branch
self.type: str = type self.type: str = type
self.category: str | NoneType = None self.category: Union[str, None] = None
def generate_data(n: int) -> List[Heartbeat]: def generate_data(n: int, n_projects: int = 5, n_past_hours: int = 24) -> List[Heartbeat]:
data: List[Heartbeat] = [] data: List[Heartbeat] = []
now: datetime = datetime.today() now: datetime = datetime.today()
projects: List[str] = [randomword(random.randint(5, 10)) for _ in range(5)] projects: List[str] = [randomword(random.randint(5, 10)) for _ in range(n_projects)]
languages: List[str] = list(LANGUAGES.keys()) languages: List[str] = list(LANGUAGES.keys())
for _ in range(n): for _ in range(n):
@ -50,7 +51,7 @@ def generate_data(n: int) -> List[Heartbeat]:
l: str = random.choice(languages) l: str = random.choice(languages)
f: str = randomword(random.randint(2, 8)) f: str = randomword(random.randint(2, 8))
delta: timedelta = timedelta( delta: timedelta = timedelta(
hours=random.randint(0, N_PAST_HOURS - 1), hours=random.randint(0, n_past_hours - 1),
minutes=random.randint(0, 59), minutes=random.randint(0, 59),
seconds=random.randint(0, 59) seconds=random.randint(0, 59)
) )
@ -65,12 +66,15 @@ def generate_data(n: int) -> List[Heartbeat]:
return data return data
def post_data_sync(data: List[Heartbeat], url: str): def post_data_sync(data: List[Heartbeat], url: str, api_key: str):
for h in data: encoded_key: str = str(base64.b64encode(api_key.encode('utf-8')), 'utf-8')
for h in tqdm(data):
r = requests.post(url, json=[h.__dict__], headers={ r = requests.post(url, json=[h.__dict__], headers={
'User-Agent': UA 'User-Agent': UA,
'Authorization': f'Basic {encoded_key}'
}) })
if r.status_code != 200: if r.status_code != 201:
print(r.text) print(r.text)
sys.exit(1) sys.exit(1)
@ -80,14 +84,21 @@ def randomword(length: int) -> str:
return ''.join(random.choice(letters) for _ in range(length)) return ''.join(random.choice(letters) for _ in range(length))
def parse_arguments():
parser = argparse.ArgumentParser(description='Wakapi test data insertion script.')
parser.add_argument('-n', type=int, default=20, help='total number of random heartbeats to generate and insert')
parser.add_argument('-u', '--url', type=str, default='http://localhost:3000/api/heartbeat',
help='url of your api\'s heartbeats endpoint')
parser.add_argument('-k', '--apikey', type=str, required=True,
help='your api key (to get one, go to the web interface, create a new user, log in and copy the key)')
parser.add_argument('-p', '--projects', type=int, default=5, help='number of different fake projects to generate')
parser.add_argument('-o', '--offset', type=int, default=24,
help='negative time offset in hours from now for to be used as an interval within which to generate heartbeats for')
return parser.parse_args()
if __name__ == '__main__': if __name__ == '__main__':
n: int = 10 args = parse_arguments()
url: str = 'http://admin:admin@localhost:3000/api/heartbeat'
if len(sys.argv) > 1: data: List[Heartbeat] = generate_data(args.n, args.projects, args.offset)
n = int(sys.argv[1]) post_data_sync(data, args.url, args.apikey)
if len(sys.argv) > 2:
url = sys.argv[2]
data: List[Heartbeat] = generate_data(n)
post_data_sync(data, url)