File size: 4,407 Bytes
e2483e1
 
 
0487dc0
16e2cb0
4f7c20c
2acfed7
 
 
 
 
 
 
ba0ca62
2acfed7
54916c4
16e2cb0
 
54916c4
6e8d51f
7208a5f
2acfed7
0487dc0
 
ba0ca62
e2483e1
99c38a1
2acfed7
e2483e1
 
16e2cb0
e2483e1
8ba86e5
16e2cb0
e2483e1
 
 
99c38a1
 
e2483e1
99c38a1
 
a2efc63
16e2cb0
a2efc63
 
 
d637ff8
 
 
 
 
 
 
 
 
ba0ca62
d637ff8
 
0487dc0
4f7c20c
d637ff8
 
 
 
 
 
 
0487dc0
4f7c20c
d637ff8
 
 
 
 
 
 
b4a0040
16e2cb0
 
 
 
 
ba0ca62
16e2cb0
 
0487dc0
16e2cb0
 
 
7208a5f
 
 
16e2cb0
 
0487dc0
 
 
 
 
 
16e2cb0
 
 
 
 
 
 
 
98c5ea8
16e2cb0
 
 
 
 
 
 
 
 
 
 
 
d637ff8
 
ba0ca62
9aba56f
6e8d51f
ba0ca62
 
0487dc0
e2483e1
 
 
 
98c5ea8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import logging
from datetime import datetime
import pandas as pd
from markets import etl as mkt_etl, DEFAULT_FILENAME as MARKETS_FILENAME, fpmmTrades_etl
from tools import DEFAULT_FILENAME as TOOLS_FILENAME, generate_tools_file
from profitability import run_profitability_analysis
from utils import (
    get_question,
    current_answer,
    RPC,
    measure_execution_time,
    DATA_DIR,
    HIST_DIR,
    TMP_DIR,
)
from get_mech_info import (
    get_mech_events_since_last_run,
    update_json_files,
)
from update_tools_accuracy import compute_tools_accuracy
from cleaning_old_info import clean_old_data_from_parquet_files
from web3_utils import updating_timestamps
from manage_space_files import move_files
from cloud_storage import load_historical_file
from tools_metrics import compute_tools_based_datasets


logging.basicConfig(level=logging.INFO)


def add_current_answer(tools_filename: str):
    # Get currentAnswer from FPMMS
    fpmms = pd.read_parquet(DATA_DIR / MARKETS_FILENAME)
    tools = pd.read_parquet(DATA_DIR / tools_filename)

    # Get the question from the tools
    logging.info("Getting the question and current answer for the tools")
    tools["title"] = tools["prompt_request"].apply(lambda x: get_question(x))
    tools["currentAnswer"] = tools["title"].apply(lambda x: current_answer(x, fpmms))

    tools["currentAnswer"] = tools["currentAnswer"].str.replace("yes", "Yes")
    tools["currentAnswer"] = tools["currentAnswer"].str.replace("no", "No")
    # Save the tools data after the updates on the content
    tools.to_parquet(DATA_DIR / tools_filename, index=False)
    del fpmms


def save_historical_data():
    """Function to save a copy of the main trades and tools file
    into the historical folder"""
    print("Saving historical data copies")
    current_datetime = datetime.now()

    timestamp = current_datetime.strftime("%Y%m%d_%H%M%S")

    try:
        tools = pd.read_parquet(TMP_DIR / "tools.parquet")
        filename = f"tools_{timestamp}.parquet"
        tools.to_parquet(HIST_DIR / filename, index=False)
        # save into cloud storage
        load_historical_file(filename)
    except Exception as e:
        print(f"Error saving tools file in the historical folder {e}")

    try:
        all_trades = pd.read_parquet(DATA_DIR / "all_trades_profitability.parquet")
        filename = f"all_trades_profitability_{timestamp}.parquet"
        all_trades.to_parquet(HIST_DIR / filename, index=False)
        # save into cloud storage
        load_historical_file(filename)

    except Exception as e:
        print(
            f"Error saving all_trades_profitability file in the historical folder {e}"
        )


@measure_execution_time
def only_new_weekly_analysis():
    """Run weekly analysis for the FPMMS project."""
    rpc = RPC
    # Run markets ETL
    logging.info("Running markets ETL")
    # mkt_etl(MARKETS_FILENAME)
    logging.info("Markets ETL completed")

    # Mech events ETL
    logging.info("Generating the mech json files")
    # get only new data
    latest_timestamp = get_mech_events_since_last_run()
    if latest_timestamp == None:
        print("Error while getting the mech events")
        return
    logging.info(f"Finished generating the mech json files from {latest_timestamp}")

    # FpmmTrades ETL
    fpmmTrades_etl(
        rpc=rpc,
        trades_filename="new_fpmmTrades.parquet",
        from_timestamp=int(latest_timestamp.timestamp()),
    )
    # Run tools ETL
    logging.info("Generate and parse the tools content")
    # generate only new file
    generate_tools_file("new_tools_info.json", "new_tools.parquet")
    logging.info("Tools ETL completed")

    add_current_answer("new_tools.parquet")

    # # Run profitability analysis
    logging.info("Running profitability analysis")
    run_profitability_analysis(
        tools_filename="new_tools.parquet",
        trades_filename="new_fpmmTrades.parquet",
        merge=True,
    )

    logging.info("Profitability analysis completed")

    # merge new json files with old json files
    update_json_files()

    save_historical_data()

    clean_old_data_from_parquet_files("2024-10-25")

    compute_tools_accuracy()
    compute_tools_based_datasets()
    # # move to tmp folder the new generated files
    move_files()
    logging.info("Weekly analysis files generated and saved")


if __name__ == "__main__":
    only_new_weekly_analysis()