<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">import os
import json
import pandas as pd
import numpy as np
from datetime import date, datetime, time
from mm_stats.definitions import NGINX_DATA_PATH
from mm_stats.definitions import logger


def series_to_list(data):
    """Convert panda series to list with python types."""
    data = data.fillna(0).values.tolist()
    try:
        data = [x.item() for x in data]
    except AttributeError:
        pass
    return data


def array_to_list(data):
    """Convert numpy array to list with python types."""
    data = np.nan_to_num(data, nan=0).tolist()
    try:
        data = [x.item() for x in data]
    except AttributeError:
        pass
    return data


def data_to_list(columndata, x_data):  # noqa
    """Convert pd.series and np.arrays to lists."""
    if type(columndata) == list:
        for x in range(0, len(columndata)):
            if type(columndata[x]) == list:
                continue
            elif type(columndata[x]) == pd.Series:
                columndata[x] = series_to_list(columndata[x])
            elif type(columndata[x]) == np.array:
                columndata[x] = array_to_list(columndata[x])

    else:
        if type(columndata) == pd.Series:
            columndata = series_to_list(columndata)
        elif type(columndata) == np.array:
            columndata = array_to_list(columndata)

    if type(x_data) == pd.Series:
        x_data = series_to_list(x_data)
    elif type(x_data) == np.array:
        x_data = array_to_list(x_data)
    if type(x_data[0]) == date:
        x_data = [datetime.combine(x, time()).timestamp() * 1000 for x in x_data]
    return columndata, x_data


def json_entry(name, columnname, columndata, x_data, _filter="all"):
    """Drop data to json."""
    path = os.path.join(NGINX_DATA_PATH, _filter, name)
    try:
        with open(path) as file:
            data = json.load(file)
    except FileNotFoundError:
        logger.info(
            "File {} not existing for filter {}. Creating a new one.".format(
                name, _filter
            )
        )
        if not os.path.exists(os.path.join(NGINX_DATA_PATH, _filter)):
            os.mkdir(os.path.join(NGINX_DATA_PATH, _filter))
        data = {}

    columndata, x_data = data_to_list(columndata, x_data)

    if type(columnname) == list:
        for entry in range(0, len(columnname)):
            content = {}
            for x in range(0, len(columndata[entry])):
                content[x_data[x]] = columndata[entry][x]
            data[columnname[entry]] = content
    else:
        content = {}
        for x in range(0, len(columndata)):
            content[x_data[x]] = columndata[x]
        data[columnname] = content

    with open(path, "w") as f:
        json.dump(data, f)


def export_to_json(filename, key, value, _filter):
    """Drop Big Numbers to json. Used for Website."""
    path = os.path.join(NGINX_DATA_PATH, _filter, filename)
    try:
        with open(path) as file:
            data = json.load(file)
    except FileNotFoundError:
        logger.info(
            "File {} not existing for filter {}. Creating a new one.".format(
                filename, _filter
            )
        )
        data = {}
        if not os.path.exists(os.path.join(NGINX_DATA_PATH, _filter)):
            os.mkdir(os.path.join(NGINX_DATA_PATH, _filter))

    if type(key) is list:
        for x in range(0, len(key)):
            data[key[x]] = value[x]
    else:
        data[key] = value

    with open(path, "w") as f:
        json.dump(data, f)
</pre></body></html>