initial commit
This commit is contained in:
commit
1066539872
|
@ -0,0 +1 @@
|
||||||
|
./testenv/*
|
|
@ -0,0 +1,14 @@
|
||||||
|
FROM ubuntu:focal
|
||||||
|
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y python3-pip
|
||||||
|
|
||||||
|
ADD requirements.txt /tmp/requirements.txt
|
||||||
|
|
||||||
|
RUN pip3 install -r /tmp/requirements.txt
|
||||||
|
|
||||||
|
ADD scrape.py /usr/local/bin/scrape.py
|
||||||
|
|
||||||
|
RUN chmod +x /usr/local/bin/scrape.py
|
||||||
|
|
||||||
|
ENTRYPOINT ["/usr/local/bin/scrape.py"]
|
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
.PHONY: image
|
||||||
|
image:
|
||||||
|
docker build -t osrsgamestats .
|
||||||
|
|
||||||
|
.PHONY: push
|
||||||
|
push: image
|
||||||
|
docker tag osrsgamestats dockermirror:5000/dpedu/osrsgamestats
|
||||||
|
docker push dockermirror:5000/dpedu/osrsgamestats
|
|
@ -0,0 +1,26 @@
|
||||||
|
---
|
||||||
|
apiVersion: batch/v1beta1
|
||||||
|
kind: CronJob
|
||||||
|
metadata:
|
||||||
|
name: osrsgamestats
|
||||||
|
namespace: jobs
|
||||||
|
spec:
|
||||||
|
schedule: "*/10 * * * *"
|
||||||
|
concurrencyPolicy: Replace
|
||||||
|
startingDeadlineSeconds: 60
|
||||||
|
jobTemplate:
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: scrape
|
||||||
|
image: dockermirror:5000/dpedu/osrsgamestats
|
||||||
|
imagePullPolicy: Always
|
||||||
|
env:
|
||||||
|
- name: INFLUX_HOST
|
||||||
|
value: "influx01"
|
||||||
|
- name: INFLUX_PORT
|
||||||
|
value: "8086"
|
||||||
|
- name: INFLUX_DB
|
||||||
|
value: osrsgamestats
|
||||||
|
restartPolicy: Never
|
|
@ -0,0 +1,81 @@
|
||||||
|
terraform {
|
||||||
|
backend "local" {}
|
||||||
|
required_version = ">= 0.13"
|
||||||
|
required_providers {
|
||||||
|
kubernetes = {
|
||||||
|
source = "hashicorp/kubernetes"
|
||||||
|
version = "2.3.2"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
experiments = [module_variable_optional_attrs]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
provider "kubernetes" {
|
||||||
|
config_path = "~/.kube/config"
|
||||||
|
config_context = "scck8s"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "influx_url" {
|
||||||
|
type = string
|
||||||
|
description = "influxdb connection url"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "namespace" {
|
||||||
|
type = string
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "instance_name" {
|
||||||
|
type = string
|
||||||
|
default = "osrsgamestats"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "image" {
|
||||||
|
type = string
|
||||||
|
default = "dockermirror:5000/dpedu/osrsgamestats"
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "suspend" {
|
||||||
|
type = bool
|
||||||
|
default = false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
variable "schedule" {
|
||||||
|
type = string
|
||||||
|
description = "kube cron expression"
|
||||||
|
default = "*/10 * * * *"
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "kubernetes_cron_job" "osrsgamestats" {
|
||||||
|
metadata {
|
||||||
|
name = var.instance_name
|
||||||
|
namespace = var.namespace
|
||||||
|
}
|
||||||
|
spec {
|
||||||
|
schedule = var.schedule
|
||||||
|
concurrency_policy = "Replace"
|
||||||
|
starting_deadline_seconds = 60
|
||||||
|
suspend = var.suspend
|
||||||
|
job_template {
|
||||||
|
metadata {}
|
||||||
|
spec {
|
||||||
|
template {
|
||||||
|
metadata {}
|
||||||
|
spec {
|
||||||
|
restart_policy = "Never"
|
||||||
|
container {
|
||||||
|
name = "scrape"
|
||||||
|
image = var.image
|
||||||
|
image_pull_policy = "Always"
|
||||||
|
env {
|
||||||
|
name = "RSSCRAPE_INFLUX_URL"
|
||||||
|
value = var.influx_url
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,2 @@
|
||||||
|
# import twitch
|
||||||
|
# helix = twitch.Helix('zfiq9befa2btjxorcieajqmvvdtu5l', '3jtwgkmmf9ko39ytqjq19murthefhq')
|
|
@ -0,0 +1,12 @@
|
||||||
|
certifi==2020.12.5
|
||||||
|
chardet==4.0.0
|
||||||
|
idna==2.10
|
||||||
|
influxdb==5.3.1
|
||||||
|
msgpack==1.0.2
|
||||||
|
python-dateutil==2.8.1
|
||||||
|
pytz==2021.1
|
||||||
|
requests==2.25.1
|
||||||
|
Rx==3.1.1
|
||||||
|
six==1.15.0
|
||||||
|
twitch-python==0.0.19
|
||||||
|
urllib3==1.26.3
|
|
@ -0,0 +1,71 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import requests
|
||||||
|
import re
|
||||||
|
from influxdb import InfluxDBClient
|
||||||
|
from urllib.parse import urlparse
|
||||||
|
import os
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
def get_rs_players(session):
|
||||||
|
r = session.get("https://www.runescape.com/player_count.js?varname=iPlayerCount&callback=jQuery3600011173447649542423_1624513024284&_=1624513024285")
|
||||||
|
matches = re.compile(r'.+\((\d+)\)').findall(r.text)
|
||||||
|
return int(matches[0])
|
||||||
|
|
||||||
|
|
||||||
|
def get_osrs_players(session):
|
||||||
|
r = session.get("https://oldschool.runescape.com")
|
||||||
|
matches = re.compile(r'There are currently ([\d,]+) people playing').findall(r.text)
|
||||||
|
return int(matches[0].replace(",", ""))
|
||||||
|
|
||||||
|
|
||||||
|
def get_influx():
|
||||||
|
url_s = os.environ.get("RSSCRAPE_INFLUX_URL")
|
||||||
|
if not url_s:
|
||||||
|
logging.critical("must set RSSCRAPE_INFLUX_URL")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
url = urlparse(url_s)
|
||||||
|
|
||||||
|
db_name = url.path[1:]
|
||||||
|
|
||||||
|
influx = InfluxDBClient(url.hostname, url.port, url.username, url.password)
|
||||||
|
influx.create_database(db_name)
|
||||||
|
influx.switch_database(db_name)
|
||||||
|
|
||||||
|
return influx
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
logging.basicConfig(level=logging.INFO, format="%(asctime)-15s %(levelname)-8s %(filename)s:%(lineno)d %(message)s")
|
||||||
|
influx = get_influx()
|
||||||
|
|
||||||
|
s = requests.session()
|
||||||
|
s.headers["User-Agent"] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:85.0) Gecko/20100101 Firefox/85.0"
|
||||||
|
s.headers["DNT"] = "1"
|
||||||
|
|
||||||
|
all_players = get_rs_players(s)
|
||||||
|
osrs_players = get_osrs_players(s)
|
||||||
|
|
||||||
|
rs3_players = all_players - osrs_players
|
||||||
|
|
||||||
|
body = [
|
||||||
|
{
|
||||||
|
"measurement": "players",
|
||||||
|
"tags": {},
|
||||||
|
"fields": {
|
||||||
|
"rs3": rs3_players,
|
||||||
|
"osrs": osrs_players,
|
||||||
|
"both_games": all_players,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
print(body)
|
||||||
|
influx.write_points(body)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in New Issue