File size: 4,559 Bytes
e2483e1
 
 
0487dc0
16e2cb0
 
2acfed7
 
 
 
 
 
 
 
54916c4
 
16e2cb0
 
54916c4
6e8d51f
7208a5f
2acfed7
0487dc0
 
e2483e1
99c38a1
2acfed7
e2483e1
 
16e2cb0
e2483e1
8ba86e5
16e2cb0
e2483e1
 
 
99c38a1
 
e2483e1
99c38a1
 
a2efc63
16e2cb0
a2efc63
 
 
d637ff8
 
 
 
 
 
 
 
 
 
 
 
0487dc0
 
d637ff8
 
 
 
 
 
 
0487dc0
 
d637ff8
 
 
 
 
 
 
b4a0040
16e2cb0
 
 
 
 
58ed767
16e2cb0
 
0487dc0
16e2cb0
 
 
7208a5f
 
 
16e2cb0
 
0487dc0
 
 
 
 
 
16e2cb0
 
 
 
 
 
 
 
98c5ea8
16e2cb0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d637ff8
 
0487dc0
9aba56f
6e8d51f
 
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
137
138
139
140
141
142
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, DEFAULT_60_DAYS_AGO_TIMESTAMP
from utils import (
    get_question,
    current_answer,
    RPC,
    measure_execution_time,
    DATA_DIR,
    HIST_DIR,
)
from get_mech_info import (
    get_mech_events_last_60_days,
    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


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(DATA_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(
        rpc=rpc,
        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()

    try:
        updating_timestamps(rpc, TOOLS_FILENAME)
    except Exception as e:
        logging.error("Error while updating timestamps of tools")
        print(e)

    save_historical_data()

    clean_old_data_from_parquet_files("2024-10-13")

    compute_tools_accuracy()

    # 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()