Add configurable explorer and ipfs links

pull/26/head
Guillermo Rodriguez 2023-10-08 20:10:40 -03:00
parent edd6ccc3e1
commit 20ee6c0317
No known key found for this signature in database
GPG Key ID: EC3AB66D5D83B392
7 changed files with 104 additions and 24 deletions

View File

@ -391,6 +391,18 @@ def telegram(
ipfs_url = load_key(config, 'skynet.telegram.ipfs_url') ipfs_url = load_key(config, 'skynet.telegram.ipfs_url')
try:
explorer_domain = load_key(config, 'skynet.telegram.explorer_domain')
except ConfigParsingError:
explorer_domain = DEFAULT_EXPLORER_DOMAIN
try:
ipfs_domain = load_key(config, 'skynet.telegram.ipfs_domain')
except ConfigParsingError:
ipfs_domain = DEFAULT_IPFS_DOMAIN
async def _async_main(): async def _async_main():
frontend = SkynetTelegramFrontend( frontend = SkynetTelegramFrontend(
tg_token, tg_token,
@ -401,7 +413,9 @@ def telegram(
db_host, db_user, db_pass, db_host, db_user, db_pass,
ipfs_url, ipfs_url,
remote_ipfs_node=ipfs_gateway_url, remote_ipfs_node=ipfs_gateway_url,
key=key key=key,
explorer_domain=explorer_domain,
ipfs_domain=ipfs_domain
) )
async with frontend.open(): async with frontend.open():
@ -442,6 +456,18 @@ def discord(
ipfs_gateway_url = load_key(config, 'skynet.discord.ipfs_gateway_url') ipfs_gateway_url = load_key(config, 'skynet.discord.ipfs_gateway_url')
ipfs_url = load_key(config, 'skynet.discord.ipfs_url') ipfs_url = load_key(config, 'skynet.discord.ipfs_url')
try:
explorer_domain = load_key(config, 'skynet.discord.explorer_domain')
except ConfigParsingError:
explorer_domain = DEFAULT_EXPLORER_DOMAIN
try:
ipfs_domain = load_key(config, 'skynet.discord.ipfs_domain')
except ConfigParsingError:
ipfs_domain = DEFAULT_IPFS_DOMAIN
async def _async_main(): async def _async_main():
frontend = SkynetDiscordFrontend( frontend = SkynetDiscordFrontend(
# dc_token, # dc_token,
@ -452,7 +478,9 @@ def discord(
db_host, db_user, db_pass, db_host, db_user, db_pass,
ipfs_url, ipfs_url,
remote_ipfs_node=ipfs_gateway_url, remote_ipfs_node=ipfs_gateway_url,
key=key key=key,
explorer_domain=explorer_domain,
ipfs_domain=ipfs_domain
) )
async with frontend.open(): async with frontend.open():

View File

@ -183,7 +183,8 @@ CONFIG_ATTRS = [
'upscaler' 'upscaler'
] ]
DEFAULT_DOMAIN = 'skygpu.net' DEFAULT_EXPLORER_DOMAIN = 'explorer.skygpu.net'
DEFAULT_IPFS_DOMAIN = 'ipfs.skygpu.net'
DEFAULT_IPFS_REMOTE = '/ip4/169.197.140.154/tcp/4001/p2p/12D3KooWKWogLFNEcNNMKnzU7Snrnuj84RZdMBg3sLiQSQc51oEv' DEFAULT_IPFS_REMOTE = '/ip4/169.197.140.154/tcp/4001/p2p/12D3KooWKWogLFNEcNNMKnzU7Snrnuj84RZdMBg3sLiQSQc51oEv'
DEFAULT_IPFS_LOCAL = 'http://127.0.0.1:5001' DEFAULT_IPFS_LOCAL = 'http://127.0.0.1:5001'

View File

@ -9,19 +9,17 @@ from pathlib import Path
from functools import partial from functools import partial
import asks import asks
import numpy
import trio import trio
import anyio import anyio
import torch
from PIL import Image, UnidentifiedImageError from PIL import Image, UnidentifiedImageError
from leap.cleos import CLEOS from leap.cleos import CLEOS
from leap.sugar import Checksum256, Name, asset_from_str from leap.sugar import Checksum256, Name, asset_from_str
from skynet.constants import DEFAULT_IPFS_DOMAIN
from skynet.ipfs import AsyncIPFSHTTP, get_ipfs_file from skynet.ipfs import AsyncIPFSHTTP, get_ipfs_file
from skynet.dgpu.errors import DGPUComputeError from skynet.dgpu.errors import DGPUComputeError
from skynet.constants import DEFAULT_DOMAIN
REQUEST_UPDATE_TIME = 3 REQUEST_UPDATE_TIME = 3
@ -61,6 +59,10 @@ class SkynetGPUConnector:
self.ipfs_client = AsyncIPFSHTTP(self.ipfs_url) self.ipfs_client = AsyncIPFSHTTP(self.ipfs_url)
self.ipfs_domain = DEFAULT_IPFS_DOMAIN
if 'ipfs_domain' in config:
self.ipfs_domain = config['ipfs_domain']
self._wip_requests = {} self._wip_requests = {}
# blockchain helpers # blockchain helpers
@ -272,7 +274,7 @@ class SkynetGPUConnector:
return b'', input_type return b'', input_type
results = {} results = {}
ipfs_link = f'https://ipfs.{DEFAULT_DOMAIN}/ipfs/{ipfs_hash}' ipfs_link = f'https://{self.ipfs_domain}/ipfs/{ipfs_hash}'
ipfs_link_legacy = ipfs_link + '/image.png' ipfs_link_legacy = ipfs_link + '/image.png'
async with trio.open_nursery() as n: async with trio.open_nursery() as n:

View File

@ -45,7 +45,9 @@ class SkynetDiscordFrontend:
db_pass: str, db_pass: str,
ipfs_url: str, ipfs_url: str,
remote_ipfs_node: str, remote_ipfs_node: str,
key: str key: str,
explorer_domain: str,
ipfs_domain: str
): ):
# self.token = token # self.token = token
self.account = account self.account = account
@ -58,6 +60,8 @@ class SkynetDiscordFrontend:
self.ipfs_url = ipfs_url self.ipfs_url = ipfs_url
self.remote_ipfs_node = remote_ipfs_node self.remote_ipfs_node = remote_ipfs_node
self.key = key self.key = key
self.explorer_domain = explorer_domain
self.ipfs_domain = ipfs_domain
self.bot = DiscordBot(self) self.bot = DiscordBot(self)
self.cleos = CLEOS(None, None, url=node_url, remote=node_url) self.cleos = CLEOS(None, None, url=node_url, remote=node_url)
@ -169,7 +173,7 @@ class SkynetDiscordFrontend:
return False return False
enqueue_tx_id = res['transaction_id'] enqueue_tx_id = res['transaction_id']
enqueue_tx_link = f'[**Your request on Skynet Explorer**](https://explorer.{DEFAULT_DOMAIN}/v2/explore/transaction/{enqueue_tx_id})' enqueue_tx_link = f'[**Your request on Skynet Explorer**](https://{self.explorer_domain}/v2/explore/transaction/{enqueue_tx_id})'
msg_text += f'**broadcasted!** \n{enqueue_tx_link}\n[{timestamp_pretty()}] *workers are processing request...* ' msg_text += f'**broadcasted!** \n{enqueue_tx_link}\n[{timestamp_pretty()}] *workers are processing request...* '
embed = discord.Embed( embed = discord.Embed(
@ -241,8 +245,48 @@ class SkynetDiscordFrontend:
await message.edit(embed=embed) await message.edit(embed=embed)
# attempt to get the image and send it # attempt to get the image and send it
ipfs_link = f'https://ipfs.{DEFAULT_DOMAIN}/ipfs/{ipfs_hash}/image.png' results = {}
resp = await get_ipfs_file(ipfs_link) ipfs_link = f'https://{self.ipfs_domain}/ipfs/{ipfs_hash}'
ipfs_link_legacy = ipfs_link + '/image.png'
async def get_and_set_results(link: str):
res = await get_ipfs_file(link)
logging.info(f'got response from {link}')
if not res or res.status_code != 200:
logging.warning(f'couldn\'t get ipfs binary data at {link}!')
else:
try:
with Image.open(io.BytesIO(res.raw)) as image:
tmp_buf = io.BytesIO()
image.save(tmp_buf, format='PNG')
png_img = tmp_buf.getvalue()
results[link] = png_img
except UnidentifiedImageError:
logging.warning(f'couldn\'t get ipfs binary data at {link}!')
tasks = [
get_and_set_results(ipfs_link),
get_and_set_results(ipfs_link_legacy)
]
await asyncio.gather(*tasks)
png_img = None
if ipfs_link_legacy in results:
png_img = results[ipfs_link_legacy]
if ipfs_link in results:
png_img = results[ipfs_link]
if not png_img:
await self.update_status_message(
status_msg,
caption,
reply_markup=build_redo_menu(),
parse_mode='HTML'
)
return True
# reword this function, may not need caption # reword this function, may not need caption
caption, embed = generate_reply_caption( caption, embed = generate_reply_caption(

View File

@ -81,11 +81,12 @@ def generate_reply_caption(
params: dict, params: dict,
tx_hash: str, tx_hash: str,
worker: str, worker: str,
reward: str reward: str,
explorer_domain: str
): ):
explorer_link = discord.Embed( explorer_link = discord.Embed(
title='[SKYNET Transaction Explorer]', title='[SKYNET Transaction Explorer]',
url=f'https://explorer.{DEFAULT_DOMAIN}/v2/explore/transaction/{tx_hash}', url=f'https://{explorer_domain}/v2/explore/transaction/{tx_hash}',
color=discord.Color.blue()) color=discord.Color.blue())
meta_info = prepare_metainfo_caption(user, worker, reward, params, explorer_link) meta_info = prepare_metainfo_caption(user, worker, reward, params, explorer_link)

View File

@ -10,17 +10,17 @@ from json import JSONDecodeError
from decimal import Decimal from decimal import Decimal
from hashlib import sha256 from hashlib import sha256
from datetime import datetime from datetime import datetime
from contextlib import ExitStack, AsyncExitStack from contextlib import AsyncExitStack
from contextlib import asynccontextmanager as acm from contextlib import asynccontextmanager as acm
from leap.cleos import CLEOS from leap.cleos import CLEOS
from leap.sugar import Name, asset_from_str, collect_stdout from leap.sugar import Name, asset_from_str, collect_stdout
from leap.hyperion import HyperionAPI from leap.hyperion import HyperionAPI
from telebot.types import InputMediaPhoto
from telebot.types import InputMediaPhoto
from telebot.async_telebot import AsyncTeleBot from telebot.async_telebot import AsyncTeleBot
from skynet.db import open_new_database, open_database_connection from skynet.db import open_database_connection
from skynet.ipfs import get_ipfs_file, AsyncIPFSHTTP from skynet.ipfs import get_ipfs_file, AsyncIPFSHTTP
from skynet.constants import * from skynet.constants import *
@ -44,7 +44,9 @@ class SkynetTelegramFrontend:
db_pass: str, db_pass: str,
ipfs_node: str, ipfs_node: str,
remote_ipfs_node: str | None, remote_ipfs_node: str | None,
key: str key: str,
explorer_domain: str,
ipfs_domain: str
): ):
self.token = token self.token = token
self.account = account self.account = account
@ -56,6 +58,8 @@ class SkynetTelegramFrontend:
self.db_pass = db_pass self.db_pass = db_pass
self.remote_ipfs_node = remote_ipfs_node self.remote_ipfs_node = remote_ipfs_node
self.key = key self.key = key
self.explorer_domain = explorer_domain
self.ipfs_domain = ipfs_domain
self.bot = AsyncTeleBot(token, exception_handler=SKYExceptionHandler) self.bot = AsyncTeleBot(token, exception_handler=SKYExceptionHandler)
self.cleos = CLEOS(None, None, url=node_url, remote=node_url) self.cleos = CLEOS(None, None, url=node_url, remote=node_url)
@ -161,7 +165,7 @@ class SkynetTelegramFrontend:
enqueue_tx_id = res['transaction_id'] enqueue_tx_id = res['transaction_id']
enqueue_tx_link = hlink( enqueue_tx_link = hlink(
'Your request on Skynet Explorer', 'Your request on Skynet Explorer',
f'https://explorer.{DEFAULT_DOMAIN}/v2/explore/transaction/{enqueue_tx_id}' f'https://{self.explorer_domain}/v2/explore/transaction/{enqueue_tx_id}'
) )
await self.append_status_message( await self.append_status_message(
@ -222,7 +226,7 @@ class SkynetTelegramFrontend:
tx_link = hlink( tx_link = hlink(
'Your result on Skynet Explorer', 'Your result on Skynet Explorer',
f'https://explorer.{DEFAULT_DOMAIN}/v2/explore/transaction/{tx_hash}' f'https://{self.explorer_domain}/v2/explore/transaction/{tx_hash}'
) )
await self.append_status_message( await self.append_status_message(
@ -234,11 +238,11 @@ class SkynetTelegramFrontend:
) )
caption = generate_reply_caption( caption = generate_reply_caption(
user, params, tx_hash, worker, reward) user, params, tx_hash, worker, reward, self.explorer_domain)
# attempt to get the image and send it # attempt to get the image and send it
results = {} results = {}
ipfs_link = f'https://ipfs.{DEFAULT_DOMAIN}/ipfs/{ipfs_hash}' ipfs_link = f'https://{self.ipfs_domain}/ipfs/{ipfs_hash}'
ipfs_link_legacy = ipfs_link + '/image.png' ipfs_link_legacy = ipfs_link + '/image.png'
async def get_and_set_results(link: str): async def get_and_set_results(link: str):
@ -278,7 +282,6 @@ class SkynetTelegramFrontend:
if ipfs_link in results: if ipfs_link in results:
png_img = results[ipfs_link] png_img = results[ipfs_link]
if not png_img: if not png_img:
await self.update_status_message( await self.update_status_message(
status_msg, status_msg,

View File

@ -67,11 +67,12 @@ def generate_reply_caption(
params: dict, params: dict,
tx_hash: str, tx_hash: str,
worker: str, worker: str,
reward: str reward: str,
explorer_domain: str
): ):
explorer_link = hlink( explorer_link = hlink(
'SKYNET Transaction Explorer', 'SKYNET Transaction Explorer',
f'https://explorer.{DEFAULT_DOMAIN}/v2/explore/transaction/{tx_hash}' f'https://explorer.{explorer_domain}/v2/explore/transaction/{tx_hash}'
) )
meta_info = prepare_metainfo_caption(tguser, worker, reward, params) meta_info = prepare_metainfo_caption(tguser, worker, reward, params)