Exemple #1
0
def rt_arrow():
    try:
        logger.info("<rt_arrow>")
        adb_data = rock.rocks("tsdbrocks", read_only=True).get("tsdb_data")
        adb_data["adb_timestamp"] = int(time.time())
        rock.rocks("adbrocks").put("adb_data", adb_data)
        logger.info("</rt_arrow>")
    except Exception as ex:
        logger.exception(ex, "Root rt_arrow exception handler:")
        time.sleep(2)
Exemple #2
0
def ts_rt():
    """
	Pump rt data down the pipeline.
	"""
    logger.info("<ts_rt>")
    global rtdb_keys
    tsdb_data = {}
    for key in rtdb_keys:
        tsdb_data[key] = rock.rocks("rtdb", read_only=True).get(key)
    tsdb_data["tsdb_timestamp"] = int(time.time())
    rock.rocks("tsdbrocks").put("tsdb_data", tsdb_data)
    logger.info("</ts_rt>")
Exemple #3
0
def ts_hourly():
    logger.info("<ts_hourly>")
    now = datetime.datetime.now().replace(minute=0, second=0, microsecond=0)
    for key in rtdb_keys:
        try:
            val = rock.rocks("rtdb", read_only=True).get(key)
            fname = f"/data/tsdb/hourly/{key}.parq"
            if os.path.exists(fname):
                df = pd.read_parquet(fname)
                nvals = len(df)
                if type(val) == dict:
                    nowpie = val
                    nowpie["date"] = now
                else:
                    nowpie = {"date": now, "value": val}
                df = df.append(nowpie, ignore_index=True)
                df.date = pd.to_datetime(df.date)
                df = df.dropna()
                df.drop_duplicates(subset=["date"], keep="first", inplace=True)
                if len(df) != nvals:
                    racoon.to_parquet(df, fname)
            else:
                logger.info("Create: " + fname)
                if type(val) == dict:
                    nowpie = {k: [v] for k, v in val.items()}
                    nowpie["date"] = [now]
                else:
                    nowpie = {"date": [now], "value": [val]}
                df = pd.DataFrame(nowpie)
                df.date = pd.to_datetime(df.date)
                racoon.to_parquet(df, fname)
        except Exception as ex:
            logger.info(f"ts_hourly.exception.{key}")
            logger.exception(ex)
    logger.info("</ts_hourly>")
Exemple #4
0
def get_adb_data():
    """
	Rate limit the hit squad.
	"""
    adb_rocks = rock.rocks("adbrocks", read_only=True)
    adb_data = adb_rocks.get("adb_data")
    adb_data["color_index"] = adb_rocks.get("color_index")
    return adb_data
	def test_hammer_read_only(self):
		N = 60
		try:
			started = time.time()
			os.makedirs("/data/" + TestRock.DBNAME, mode=0o770, exist_ok=True)
			for idx in range(N):
				rock.rocks(TestRock.DBNAME).put(f"key{idx}", idx)
			test_result = True
			for idx in range(N):
				val = rock.rocks(TestRock.DBNAME, read_only=True).get(f"key{idx}")
				test_result = test_result and (val == idx)
				if not test_result:
					print(idx, val)
			elapsed = time.time() - started
			if elapsed >= 8:
				print("8 second timeout on testrocks. ;?")
				assert False
		except Exception as ex:
			print(ex)
			raise ex
Exemple #6
0
def day_arrow():
    """
	Daily spot model.
	"""
    logger.info("<day_spot_model>")

    fn = "/data/tsdb/daily/spot_xaubtc.parq"
    df = pd.read_parquet(fn)
    df.columns = ["date", "spot"]

    df["time"] = range(len(df))
    df["log1p_spot"] = df.spot.apply(np.log1p)

    aa, bb, cc, dd, ee = np.polyfit(df.time, df.log1p_spot, 4)

    labels = [f"spot_model_{x}" for x in range(6)]
    log_pads = [-0.80, -0.40, 0.0, 0.5, 1, 1.2]
    exp_pads = [0.662, 0.496, 0.248, -0.244, -1.044, -1.512]
    #log_pads = [-0.80, -0.40, 0.0, 0.5, 1.0, 1.1]
    #exp_pads = [0.66, 0.5, 0.25, -0.2, -1.0, -1.1]
    for label, lpad, epad in zip(labels, log_pads, exp_pads):
        log1p_spot_model = aa * df.time**4 + bb * df.time**3 + cc * df.time**2 + dd * df.time + ee
        log1p_spot_model += lpad
        spot_model = np.exp(log1p_spot_model) - 1
        spot_model += epad
        df[f"{label}"] = spot_model
        df[f"{label}"] = df[f"{label}"].apply(lambda x: max(x, 0.001))

    spot_model_bands = df[labels].tail(1).values.tolist()[0]
    spot = df.spot.iloc[-1]
    spot_model_band = stats.closest(spot_model_bands, spot)
    color_index = spot_model_bands.index(spot_model_band)

    rock.rocks("adbrocks").put("spot_model_bands", spot_model_bands)
    rock.rocks("adbrocks").put("color_index", color_index)

    racoon.to_csv(df, "/data/adbcsv/spot_model_xaubtc_daily.csv")
    logger.info("</day_spot_model>")
Exemple #7
0
def peek():
    """
	Interactive debugging in prod...
	"""
    return rock.rocks("adbrocks", read_only=True).get("adb_data")
Exemple #8
0
def write_rt():
    """
	Write real-time data.
	"""
    try:
        # Gold Spots:
        spots_usdxau = get_spots("gold")
        #logger.info("spots_usdxau" + str(spots_usdxau))
        spot_usdxau = stats.robust_mean(spots_usdxau)

        # Bitcoin Spots:
        spots_usdbtc = get_spots("bitcoin")
        #logger.info("spots_usdbtc" + str(spots_usdbtc))
        spot_usdbtc = stats.robust_mean(spots_usdbtc)

        # Average Spot:
        spot_xaubtc = spot_usdbtc / spot_usdxau
        spot_btcxau = 1.0 / spot_xaubtc

        # Purge terrorism units:
        spots_xaubtc = [x / spot_usdxau for x in spots_usdbtc]
        spots_btcxau = [1.0 / x for x in spots_xaubtc]

        # System Stats:
        blockchain_info = bitcoin.bitcoincli.blockchaininfo()
        bitcoin_info = bitcoin.bitcoincli.info()
        blockchain_stats = bitcoin.blockchain.stats()

        # Storage:
        dats = []
        keys = []

        for source, source_spot in zip(gold.spot_source_names, spots_btcxau):
            key = f"{source}_spot_btcxau"
            keys += [key]
            dats += [(key, source_spot)]

        for source, source_spot in zip(bitcoin.spot_source_names,
                                       spots_xaubtc):
            key = f"{source}_spot_xaubtc"
            keys += [key]
            dats += [(key, source_spot)]

        extra_dats = [
            ("spot_usdxau", spot_usdxau),
            ("spot_usdbtc", spot_usdbtc),
            ("spot_btcxau", spot_btcxau),
            ("spot_xaubtc", spot_xaubtc),
            ("blockchain_info", blockchain_info),
            ("bitcoin_info", bitcoin_info),
            ("blockchain_stats", blockchain_stats),
            ("rtdb_timestamp", int(time.time())),
        ]

        dats += extra_dats
        keys += [x[0] for x in extra_dats]
        dats += [
            ("keys", keys),
        ]

        for dat in dats:
            #logger.info("rtdb.put: " + dat[0])
            try:
                rock.rocks("rtdb").put(dat[0], dat[1])
            except rock.rocksdb.errors.RocksIOError as ex:
                pass

    except Exception as ex:
        time.sleep(2)
        logger.exception(ex)
Exemple #9
0
def peek():
    """
	Interactive debugging in prod...
	"""
    return rock.rocks("rtdb", read_only=True).get("spot_xaubtc")
Exemple #10
0
"""
import datetime
import math
import os
import time

import numpy as np
import pandas as pd

from util import logger
from util import racoon
from util import rock
from util import stats


tsdb_keys = list(rock.rocks("tsdbrocks").get("tsdb_data").keys())

gold_spot_keys = [x for x in tsdb_keys if "_spot_btcxau" in x]
bitcoin_spot_keys = [x for x in tsdb_keys if "_spot_xaubtc" in x]
keys = tsdb_keys.copy()



def gold_minute_arrow():
	"""
	Maintain minutely spot aggregates for gold.
	"""
	global gold_spot_keys
	logger.info("<gold_spots_minutely>")
	gold_spot_keys = gold_spot_keys.copy()
	df = pd.read_parquet(f"/data/tsdb/minutely/{gold_spot_keys[0]}.parq")
Exemple #11
0
import pandas as pd
import schedule

from util import logger
from util import racoon
from util import rock


def peek():
    """
	Interactive debugging in prod...
	"""
    return rock.rocks("tsdbrocks", read_only=True).get("tsdb_data")


rtdb_keys = rock.rocks("rtdb", read_only=True).get("keys")

periods = ["minutely", "hourly", "daily"]
for period in periods:
    path = f"/data/tsdb/{period}"
    if not os.path.exists(path):
        os.makedirs(path, mode=0o770, exist_ok=True)


def ts_rt():
    """
	Pump rt data down the pipeline.
	"""
    logger.info("<ts_rt>")
    global rtdb_keys
    tsdb_data = {}