Add demo data command
This commit is contained in:
parent
4cea5d2310
commit
f56ea99dc2
105
shynet/core/management/commands/demo.py
Normal file
105
shynet/core/management/commands/demo.py
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
import traceback
|
||||||
|
from django.utils.timezone import now
|
||||||
|
from django.utils.timezone import timedelta
|
||||||
|
import random
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.contrib.sites.models import Site
|
||||||
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
|
from django.utils.crypto import get_random_string
|
||||||
|
import user_agents
|
||||||
|
from logging import info
|
||||||
|
|
||||||
|
from core.models import User, Service
|
||||||
|
from analytics.models import Session, Hit
|
||||||
|
from analytics.tasks import ingress_request
|
||||||
|
|
||||||
|
LOCATIONS = [
|
||||||
|
"/",
|
||||||
|
"/post/{rand}",
|
||||||
|
"/login",
|
||||||
|
"/me",
|
||||||
|
]
|
||||||
|
|
||||||
|
REFERRERS = [
|
||||||
|
"https://news.ycombinator.com/item?id=11116274",
|
||||||
|
"https://news.ycombinator.com/item?id=24872911",
|
||||||
|
"https://reddit.com",
|
||||||
|
"https://facebook.com",
|
||||||
|
"https://twitter.com/milesmccain",
|
||||||
|
"https://twitter.com",
|
||||||
|
"https://stanford.edu/~mccain/",
|
||||||
|
"https://tiktok.com",
|
||||||
|
"https://io.stanford.edu",
|
||||||
|
"https://en.wikipedia.org",
|
||||||
|
"https://stackoverflow.com",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
""
|
||||||
|
]
|
||||||
|
|
||||||
|
USER_AGENTS = [
|
||||||
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/43.4",
|
||||||
|
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36",
|
||||||
|
"Mozilla/5.0 (iPhone; CPU iPhone OS 11_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko)",
|
||||||
|
"Version/10.0 Mobile/14E304 Safari/602.1"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = "Configures a Shynet demo service"
|
||||||
|
|
||||||
|
def add_arguments(self, parser):
|
||||||
|
parser.add_argument(
|
||||||
|
"name", type=str,
|
||||||
|
)
|
||||||
|
parser.add_argument("owner_email", type=str)
|
||||||
|
parser.add_argument(
|
||||||
|
"avg", type=int,
|
||||||
|
)
|
||||||
|
parser.add_argument("deviation", type=float, default=0.4)
|
||||||
|
parser.add_argument(
|
||||||
|
"days", type=int,
|
||||||
|
)
|
||||||
|
parser.add_argument("load_time", type=float, default=1000)
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
owner = User.objects.get(email=options.get("owner_email"))
|
||||||
|
service = Service.objects.create(name=options.get("name"), owner=owner)
|
||||||
|
|
||||||
|
print(f"Created demo service `{service.name}` (uuid: `{service.uuid}`, owner: {owner})")
|
||||||
|
|
||||||
|
# Go through each day requested, creating sessions and hits
|
||||||
|
for days in range(options.get("days")):
|
||||||
|
day = (now() - timedelta(days=days)).replace(hour=0, minute=0, second=0)
|
||||||
|
print(f"Populating info for {day}...")
|
||||||
|
avg = options.get("avg")
|
||||||
|
deviation = options.get("deviation")
|
||||||
|
ips = [".".join(map(str, (random.randint(0, 255) for _ in range(4)))) for _ in range(avg)]
|
||||||
|
|
||||||
|
n = avg + random.randrange(-1 * deviation * avg, deviation * avg)
|
||||||
|
for _ in range(
|
||||||
|
n
|
||||||
|
):
|
||||||
|
time = day + timedelta(
|
||||||
|
hours=random.randrange(0, 23),
|
||||||
|
minutes=random.randrange(0, 59),
|
||||||
|
seconds=random.randrange(0, 59),
|
||||||
|
)
|
||||||
|
ip = random.choice(ips)
|
||||||
|
load_time = random.normalvariate(options.get("load_time"), 500)
|
||||||
|
referrer = random.choice(REFERRERS)
|
||||||
|
location = "https://example.com" + random.choice(LOCATIONS).replace("{rand}", str(random.randint(0, n)))
|
||||||
|
user_agent = random.choice(USER_AGENTS)
|
||||||
|
ingress_request(service.uuid, "JS", time, {"loadTime": load_time, "referrer": referrer}, ip, location, user_agent)
|
||||||
|
|
||||||
|
print(f"Created {n} demo hits on {day}!")
|
||||||
|
|
||||||
|
self.stdout.write(
|
||||||
|
self.style.SUCCESS(
|
||||||
|
f"Successfully created demo data!"
|
||||||
|
)
|
||||||
|
)
|
Loading…
Reference in New Issue
Block a user