kopia lustrzana https://github.com/bugout-dev/moonstream
temp changes.
rodzic
e3072a36ad
commit
d4c3ebd84d
|
@ -1,10 +1,12 @@
|
||||||
from typing import Optional, Dict, Any, Union, List
|
from typing import Optional, Dict, Any, Union, List
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
import json
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
import uuid
|
import uuid
|
||||||
import requests # type: ignore
|
import requests # type: ignore
|
||||||
|
|
||||||
|
from ..actions import get_all_entries_from_search
|
||||||
from ..settings import bugout_client as bc
|
from ..settings import bugout_client as bc
|
||||||
from ..settings import (
|
from ..settings import (
|
||||||
MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
||||||
|
@ -88,9 +90,59 @@ def recive_S3_data_from_query(
|
||||||
return data_response.json()
|
return data_response.json()
|
||||||
|
|
||||||
|
|
||||||
|
def generate_leaderboard_owners(
|
||||||
|
leaderboards: List[Dict[str, Any]],
|
||||||
|
) -> List[Dict[str, Any]]:
|
||||||
|
"""
|
||||||
|
Get list of all leaderboard and add owners to it.
|
||||||
|
|
||||||
|
{
|
||||||
|
"resources": [
|
||||||
|
{
|
||||||
|
"id": "ff90a1eb-6552-4bba-9d2b-f54cf2ab0103",
|
||||||
|
"application_id": "e1b6321a-5e68-4f9d-ba0c-d87e37d9e7a9",
|
||||||
|
"resource_data": {
|
||||||
|
"type": "leaderboard",
|
||||||
|
"leaderboard_id": "0b112383-c7d2-4734-818b-1600d5f096f8"
|
||||||
|
},
|
||||||
|
"created_at": "2023-08-09T11:49:06.992161+00:00",
|
||||||
|
"updated_at": "2023-08-09T11:49:06.992161+00:00"
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
|
leaderboard_owners = []
|
||||||
|
|
||||||
|
for leaderboard in leaderboards:
|
||||||
|
leaderboard_id = leaderboard["resource_data"]["leaderboard_id"]
|
||||||
|
resource_id = leaderboard["resource_id"]
|
||||||
|
|
||||||
|
holders = bc.get_resource_holders(
|
||||||
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
||||||
|
resource_id=resource_id,
|
||||||
|
timeout=BUGOUT_REQUEST_TIMEOUT_SECONDS,
|
||||||
|
)
|
||||||
|
|
||||||
|
owner = [
|
||||||
|
holder["id"]
|
||||||
|
for holder in holders.holders
|
||||||
|
if holder["holder_type"] == "user" and "admin" in holder["permissions"]
|
||||||
|
][0]
|
||||||
|
|
||||||
|
leaderboard_owners.append(
|
||||||
|
{
|
||||||
|
"leaderboard_id": leaderboard_id,
|
||||||
|
"owner": owner,
|
||||||
|
"resource_id": resource_id,
|
||||||
|
"created_at": leaderboard["created_at"],
|
||||||
|
"updated_at": leaderboard["updated_at"],
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return leaderboard_owners
|
||||||
|
|
||||||
|
|
||||||
def collect_billing_information(
|
def collect_billing_information(
|
||||||
month: str,
|
month: str,
|
||||||
token: Optional[str] = None,
|
|
||||||
user_id: Optional[str] = None,
|
user_id: Optional[str] = None,
|
||||||
contracts: Optional[Dict[str, List[str]]] = None,
|
contracts: Optional[Dict[str, List[str]]] = None,
|
||||||
) -> Dict[str, Any]:
|
) -> Dict[str, Any]:
|
||||||
|
@ -110,26 +162,8 @@ def collect_billing_information(
|
||||||
- moonstream contracts
|
- moonstream contracts
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if token is None and user_id is None:
|
|
||||||
raise Exception("Either token or user_id must be provided")
|
|
||||||
|
|
||||||
# Get user_id
|
# Get user_id
|
||||||
|
|
||||||
if user_id is None and token is not None:
|
|
||||||
bugout_user = bc.get_user(
|
|
||||||
token=token,
|
|
||||||
timeout=BUGOUT_REQUEST_TIMEOUT_SECONDS,
|
|
||||||
)
|
|
||||||
|
|
||||||
user_id = str(bugout_user.id)
|
|
||||||
|
|
||||||
used_token = token
|
|
||||||
|
|
||||||
elif user_id is not None and used_token is None:
|
|
||||||
# Get user's subscriptions resources
|
|
||||||
|
|
||||||
used_token = MOONSTREAM_ADMIN_ACCESS_TOKEN
|
|
||||||
|
|
||||||
subscription_resources = bc.list_resources(
|
subscription_resources = bc.list_resources(
|
||||||
token=MOONSTREAM_ADMIN_ACCESS_TOKEN, # type: ignore
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN, # type: ignore
|
||||||
params={
|
params={
|
||||||
|
@ -139,6 +173,8 @@ def collect_billing_information(
|
||||||
timeout=BUGOUT_REQUEST_TIMEOUT_SECONDS,
|
timeout=BUGOUT_REQUEST_TIMEOUT_SECONDS,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
print(subscription_resources.resources)
|
||||||
|
|
||||||
if len(subscription_resources.resources) == 0:
|
if len(subscription_resources.resources) == 0:
|
||||||
subscription_amount = 0
|
subscription_amount = 0
|
||||||
else:
|
else:
|
||||||
|
@ -149,7 +185,7 @@ def collect_billing_information(
|
||||||
### search in subscriptions collection
|
### search in subscriptions collection
|
||||||
|
|
||||||
subscription_collection = bc.search(
|
subscription_collection = bc.search(
|
||||||
token=used_token, # type: ignore
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN, # type: ignore
|
||||||
journal_id=collection_id,
|
journal_id=collection_id,
|
||||||
content=False,
|
content=False,
|
||||||
query="",
|
query="",
|
||||||
|
@ -161,7 +197,7 @@ def collect_billing_information(
|
||||||
### Get user's queries resources
|
### Get user's queries resources
|
||||||
|
|
||||||
query_resources = bc.list_resources(
|
query_resources = bc.list_resources(
|
||||||
token=used_token, # type: ignore
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN, # type: ignore
|
||||||
params={"user_id": user_id, "type": BUGOUT_RESOURCE_QUERY_RESOLVER},
|
params={"user_id": user_id, "type": BUGOUT_RESOURCE_QUERY_RESOLVER},
|
||||||
timeout=BUGOUT_REQUEST_TIMEOUT_SECONDS,
|
timeout=BUGOUT_REQUEST_TIMEOUT_SECONDS,
|
||||||
)
|
)
|
||||||
|
@ -169,14 +205,15 @@ def collect_billing_information(
|
||||||
query_amount = len(query_resources.resources)
|
query_amount = len(query_resources.resources)
|
||||||
|
|
||||||
### Get user's leaderboards resources
|
### Get user's leaderboards resources
|
||||||
if used_token is not None:
|
leaderboard_resources = bc.list_resources(
|
||||||
leaderboards = requests.get(
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN, # type: ignore
|
||||||
"https://engineapi.moonstream.to/leaderboard/leaderboards",
|
params={"user_id": user_id, "type": "leaderboard"},
|
||||||
headers={"Authorization": f"Bearer {token}"},
|
timeout=BUGOUT_REQUEST_TIMEOUT_SECONDS,
|
||||||
).json()
|
)
|
||||||
|
|
||||||
else:
|
leaderboards = generate_leaderboard_owners(
|
||||||
leaderboards = {}
|
leaderboards=leaderboard_resources.resources
|
||||||
|
)
|
||||||
|
|
||||||
# Get user leaderboards
|
# Get user leaderboards
|
||||||
|
|
||||||
|
@ -184,6 +221,82 @@ def collect_billing_information(
|
||||||
|
|
||||||
contract_data = {}
|
contract_data = {}
|
||||||
|
|
||||||
|
leaderboard_configs = get_all_entries_from_search(
|
||||||
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
||||||
|
journal_id="a75b4538-3323-4f1c-a57a-6fd858f0c424",
|
||||||
|
search_query="",
|
||||||
|
content=True,
|
||||||
|
limit=1000,
|
||||||
|
)
|
||||||
|
|
||||||
|
"""
|
||||||
|
class BugoutSearchResult(BaseModel):
|
||||||
|
entry_url: str
|
||||||
|
content_url: str
|
||||||
|
title: str
|
||||||
|
content: Optional[str]
|
||||||
|
tags: List[str]
|
||||||
|
created_at: str
|
||||||
|
updated_at: str
|
||||||
|
score: float
|
||||||
|
context_type: Optional[str] = None
|
||||||
|
context_url: Optional[str] = None
|
||||||
|
context_id: Optional[str] = None
|
||||||
|
|
||||||
|
{
|
||||||
|
"leaderboard_id":"258a9042-c8c5-48d2-bf33-3e516afc6c03",
|
||||||
|
"query_name":"leaderboard_258a9042_c8c5_48d2_bf33_3e516afc6c03",
|
||||||
|
"params":{
|
||||||
|
"shards_common": 0,
|
||||||
|
"shards_uncommon": 2,
|
||||||
|
"shards_rare": 3,
|
||||||
|
"shards_epic": 5,
|
||||||
|
"shards_legendary": 10,
|
||||||
|
"equipments_common": 0,
|
||||||
|
"equipments_uncommon": 70,
|
||||||
|
"equipments_rare": 100,
|
||||||
|
"equipments_epic": 180,
|
||||||
|
"equipments_legendary": 350,
|
||||||
|
"artifacts_common": 0,
|
||||||
|
"artifacts_uncommon": 30,
|
||||||
|
"artifacts_rare": 40,
|
||||||
|
"artifacts_epic": 80,
|
||||||
|
"artifacts_legendary": 160,
|
||||||
|
"common_upgrade_points": 0,
|
||||||
|
"uncommon_upgrade_points": 65,
|
||||||
|
"rare_upgrade_points": 95,
|
||||||
|
"epic_upgrade_points": 155,
|
||||||
|
"legendary_upgrade_points": 300,
|
||||||
|
"gold_chest_points": 1,
|
||||||
|
"magical_chest_points": 10,
|
||||||
|
"legendary_chest_points": 35,
|
||||||
|
"ultra_chest_points": 120,
|
||||||
|
"wooden_chest_points": 0,
|
||||||
|
"silver_chest_points": 0,
|
||||||
|
"since_timestamp": 1698796800,
|
||||||
|
"until_timestamp": 1701388800
|
||||||
|
},
|
||||||
|
"normalize_addresses": true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
leaderboard_configs_mapper = {}
|
||||||
|
|
||||||
|
for leaderboard_entry in leaderboard_configs:
|
||||||
|
tags = leaderboard_entry.tags
|
||||||
|
try:
|
||||||
|
content = json.loads(leaderboard_entry.content)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(e)
|
||||||
|
continue
|
||||||
|
|
||||||
|
leaderboard_configs_mapper[content["leaderboard_id"]] = {
|
||||||
|
"query_name": content["query_name"],
|
||||||
|
"update_activated": True if "status:active" in tags else False,
|
||||||
|
}
|
||||||
|
|
||||||
if contracts is not None:
|
if contracts is not None:
|
||||||
client = Moonstream()
|
client = Moonstream()
|
||||||
|
|
||||||
|
@ -192,7 +305,7 @@ def collect_billing_information(
|
||||||
for blockchain, addresses in contracts.items():
|
for blockchain, addresses in contracts.items():
|
||||||
contracts_events = recive_S3_data_from_query(
|
contracts_events = recive_S3_data_from_query(
|
||||||
client=client,
|
client=client,
|
||||||
token=used_token, # type: ignore
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN, # type: ignore
|
||||||
query_name="template_contract_events_per_month",
|
query_name="template_contract_events_per_month",
|
||||||
params={},
|
params={},
|
||||||
time_await=2,
|
time_await=2,
|
||||||
|
@ -210,6 +323,34 @@ def collect_billing_information(
|
||||||
|
|
||||||
contract_data[blockchain] = contracts_events
|
contract_data[blockchain] = contracts_events
|
||||||
|
|
||||||
|
"""
|
||||||
|
{
|
||||||
|
"id": "258a9042-c8c5-48d2-bf33-3e516afc6c03",
|
||||||
|
"title": "Boomland: Hunter League - Season 3",
|
||||||
|
"description": "U2NvcmluZzoKKiBVcGdyYWRlLCBkZXBlbmRpbmcgb24gcmFyaXR5ICh1bmNvbW1vbiB1cGdyYWRlcyB3b3J0aCA2NSBwb2ludHMsIHJhcmUgOTUsIGVwaWMgMTU1LCBsZWdlbmRhcnkgMzAwKQoqIE9wZW5pbmcgY2hlc3QKICAgICogR29sZCA9IDFwCiAgICAqIE1hZ2ljYWwgPSAxMHAKICAgICogTGVnZW5kYXJ5IFJveWFsID0gMzVwCiAgICAqIFVsdHJhIFN1cHJlbWUgPSAxMjBwCiogR2V0dGluZyBhIHNoYXJkLCAyIHBvaW50IGZvciB1bmNvbW1vbiwgMyBwb2ludCBmb3IgcmFyZSwgNSBwb2ludCBmb3IgZXBpYywgMTAgcG9pbnQgZm9yIGxlZ2VuZGFyeS4KKiBHZXR0aW5nIGVxdWlwbWVudCwgNzAgcG9pbnQgZm9yIHVuY29tbW9uLCAxMDAgcG9pbnQgZm9yIHJhcmUsIDE4MCBwb2ludCBmb3IgZXBpYywgMzUwIHBvaW50IGZvciBsZWdlbmRhcnkuCiogR2V0dGluZyBhbiBhcnRpZmFjdCwgMzAgcG9pbnQgZm9yIHVuY29tbW9uLCA0MCBwb2ludCBmb3IgcmFyZSwgODAgcG9pbnQgZm9yIGVwaWMsIDE2MCBwb2ludCBmb3IgbGVnZW5kYXJ5Lg==",
|
||||||
|
"resource_id": "380316e7-475d-4778-bab3-55cc37d5bd31",
|
||||||
|
"created_at": "2023-11-01T13:50:39.211766+00:00",
|
||||||
|
"updated_at": "2023-11-01T14:25:27.953960+00:00"
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
for leaderboard in leaderboards:
|
||||||
|
if leaderboard["id"] in leaderboard_configs_mapper:
|
||||||
|
leaderboard["query_name"] = leaderboard_configs_mapper[leaderboard["id"]][
|
||||||
|
"query_name"
|
||||||
|
]
|
||||||
|
leaderboard["update_activated"] = leaderboard_configs_mapper[
|
||||||
|
leaderboard["id"]
|
||||||
|
]["update_activated"]
|
||||||
|
|
||||||
|
# get leaderboard info
|
||||||
|
|
||||||
|
leaderboard_info = requests.get(
|
||||||
|
f"https://engineapi.moonstream.to/leaderboard/info?leaderboard_id={leaderboard['id']}",
|
||||||
|
).json()
|
||||||
|
|
||||||
|
leaderboard["users_count"] = leaderboard_info["users_count"]
|
||||||
|
leaderboard["last_updated_at"] = leaderboard_info["last_updated_at"]
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"subscriptions": subscription_amount,
|
"subscriptions": subscription_amount,
|
||||||
"queries": query_amount,
|
"queries": query_amount,
|
||||||
|
|
|
@ -227,7 +227,6 @@ def moonworm_tasks_add_subscription_handler(args: argparse.Namespace) -> None:
|
||||||
def generate_billing_handler(args: argparse.Namespace) -> None:
|
def generate_billing_handler(args: argparse.Namespace) -> None:
|
||||||
billing_info = billing.collect_billing_information(
|
billing_info = billing.collect_billing_information(
|
||||||
month=args.month,
|
month=args.month,
|
||||||
token=args.user_token,
|
|
||||||
user_id=args.user_id,
|
user_id=args.user_id,
|
||||||
contracts=args.contracts,
|
contracts=args.contracts,
|
||||||
)
|
)
|
||||||
|
|
Ładowanie…
Reference in New Issue