mirror of
https://github.com/jpetazzo/container.training.git
synced 2026-03-02 17:30:20 +00:00
71 lines
1.7 KiB
Python
71 lines
1.7 KiB
Python
import logging
|
|
import os
|
|
from redis import Redis
|
|
import requests
|
|
import time
|
|
|
|
DEBUG = os.environ.get("DEBUG", "").lower().startswith("y")
|
|
|
|
log = logging.getLogger(__name__)
|
|
if DEBUG:
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
else:
|
|
logging.basicConfig(level=logging.INFO)
|
|
logging.getLogger("requests").setLevel(logging.WARNING)
|
|
|
|
|
|
redis = Redis("redis")
|
|
|
|
|
|
def get_random_bytes():
|
|
r = requests.get("http://rng/32")
|
|
return r.content
|
|
|
|
|
|
def hash_bytes(data):
|
|
r = requests.post("http://hasher/",
|
|
data=data,
|
|
headers={"Content-Type": "application/octet-stream"})
|
|
hex_hash = r.text
|
|
return hex_hash
|
|
|
|
|
|
def work_loop(interval=1):
|
|
deadline = 0
|
|
loops_done = 0
|
|
while True:
|
|
if time.time() > deadline:
|
|
log.info("{} units of work done, updating hash counter"
|
|
.format(loops_done))
|
|
redis.incrby("hashes", loops_done)
|
|
loops_done = 0
|
|
deadline = time.time() + interval
|
|
work_once()
|
|
loops_done += 1
|
|
|
|
|
|
def work_once():
|
|
log.debug("Doing one unit of work")
|
|
time.sleep(0.1)
|
|
random_bytes = get_random_bytes()
|
|
hex_hash = hash_bytes(random_bytes)
|
|
if not hex_hash.startswith('0'):
|
|
log.debug("No coin found")
|
|
return
|
|
log.info("Coin found: {}...".format(hex_hash[:8]))
|
|
created = redis.hset("wallet", hex_hash, random_bytes)
|
|
if not created:
|
|
log.info("We already had that coin")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
while True:
|
|
try:
|
|
work_loop()
|
|
except:
|
|
log.exception("In work loop:")
|
|
log.error("Waiting 10s and restarting.")
|
|
time.sleep(10)
|
|
|
|
|