Astroport.ONE/RUNTIME/SECTOR.refresh.sh

318 lines
14 KiB
Bash
Raw Normal View History

#!/bin/bash
################################################################################
# Author: Fred (support@qo-op.com)
# Version: 0.2
# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/)
################################################################################
MY_PATH="`dirname \"$0\"`" # relative
MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized
. "$MY_PATH/../tools/my.sh"
################################################################################
2023-10-21 19:48:56 +02:00
start=`date +%s`
## SECTOR REFRESH
# SHARE & UPDATE IPNS TOGETHER
############################################
2023-10-30 13:25:08 +01:00
echo "> RUNNING SECTOR.refresh"
[[ ${IPFSNODEID} == "" ]] && echo "IPFSNODEID is empty - EXIT -" && exit 1
2023-10-21 19:48:56 +02:00
MOATS=$(date -u +"%Y%m%d%H%M%S%4N")
mkdir ~/.zen/tmp/${MOATS}
2024-01-04 12:04:07 +01:00
## UMAPS list made BY UPLANET.refresh.sh
2023-10-21 19:48:56 +02:00
for i in $*; do
UMAPS=("$i" ${UMAPS[@]})
done
2024-01-04 12:04:07 +01:00
[[ ${#UMAPS[@]} == 0 ]] && UMAPS="_0.00_0.00"
2023-10-21 19:48:56 +02:00
######## INIT SECTORS ########################
for UMAP in ${UMAPS[@]}; do
LAT=$(echo ${UMAP} | cut -d '_' -f 2)
LON=$(echo ${UMAP} | cut -d '_' -f 3)
[[ ${LAT} == "" || ${LON} == "" ]] && echo ">> ERROR BAD ${LAT} ${LON}" && continue
[[ ${LAT} == "null" || ${LON} == "null" ]] && echo ">> ERROR BAD ${LAT} ${LON}" && continue
2023-10-25 12:34:06 +02:00
SECLAT="${LAT::-1}"
SECLON="${LON::-1}"
2023-10-21 19:48:56 +02:00
2023-10-25 12:34:06 +02:00
MYSECTORS=("_${SECLAT}_${SECLON}" ${MYSECTORS[@]})
2023-10-21 19:48:56 +02:00
done
2024-01-04 12:04:07 +01:00
## GET UNIQ SECTORS LIST
2023-10-21 19:48:56 +02:00
SECTORS=($(echo "${MYSECTORS[@]}" | tr ' ' '\n' | sort -u))
2023-10-30 13:25:08 +01:00
[[ ${SECTORS[@]} == "" ]] && echo "> NO SECTOR FOUND" && exit 0
2023-10-21 19:48:56 +02:00
#########################################################""
2023-12-04 12:58:28 +01:00
echo "ACTIVATED SECTORS : ${SECTORS[@]}"
2023-10-21 19:48:56 +02:00
for SECTOR in ${SECTORS[@]}; do
2023-10-30 13:25:08 +01:00
echo "_____SECTOR ${SECTOR}"
2023-10-23 15:06:58 +02:00
mkdir -p ~/.zen/tmp/${MOATS}/${SECTOR}/CHAIN/
2023-10-25 12:34:06 +02:00
SLAT=$(echo ${SECTOR} | cut -d '_' -f 2)
SLON=$(echo ${SECTOR} | cut -d '_' -f 3)
2023-10-21 19:48:56 +02:00
##############################################################
G1PUB=$(${MY_PATH}/../tools/keygen -t duniter "${UPLANETNAME}${SECTOR}" "${UPLANETNAME}${SECTOR}")
[[ ! ${G1PUB} ]] && echo "ERROR generating SECTOR WALLET" && exit 1
COINS=$($MY_PATH/../tools/COINScheck.sh ${G1PUB} | tail -n 1)
echo "SECTOR : ${SECTOR} (${COINS} G1) WALLET : ${G1PUB}"
ZEN=$(echo "($COINS - 1) * 10" | bc | cut -d '.' -f 1)
2023-10-21 19:48:56 +02:00
2023-12-01 18:01:22 +01:00
${MY_PATH}/../tools/keygen -t ipfs -o ~/.zen/tmp/${MOATS}/${SECTOR}.priv "${UPLANETNAME}${SECTOR}" "${UPLANETNAME}${SECTOR}"
ipfs key rm ${G1PUB} > /dev/null 2>&1 ## AVOID ERROR ON IMPORT
SECTORNS=$(ipfs key import ${G1PUB} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/${SECTOR}.priv)
2023-10-21 19:48:56 +02:00
rm ~/.zen/tmp/${MOATS}/${SECTOR}.priv
echo "ORIGIN : ${myIPFS}/ipns/${SECTORNS}/"
###################### SPATIO TEMPORAL KEYS
## YESTERDATE ###############
${MY_PATH}/../tools/keygen -t ipfs -o ~/.zen/tmp/${MOATS}/${YESTERDATE}.priv "${YESTERDATE}${UPLANETNAME}${SECTOR}" "${YESTERDATE}${UPLANETNAME}${SECTOR}"
ipfs key rm ${YESTERDATE}${G1PUB} > /dev/null 2>&1
YESTERDATENS=$(ipfs key import ${YESTERDATE}${G1PUB} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/${YESTERDATE}.priv)
echo "YESTERDAY : ${myIPFS}/ipns/${YESTERDATENS}"
## TODATE #########################################
${MY_PATH}/../tools/keygen -t ipfs -o ~/.zen/tmp/${MOATS}/${TODATE}.priv "${TODATE}${UPLANETNAME}${SECTOR}" "${TODATE}${UPLANETNAME}${SECTOR}"
ipfs key rm ${TODATE}${G1PUB} > /dev/null 2>&1
TODATENS=$(ipfs key import ${TODATE}${G1PUB} -f pem-pkcs8-cleartext ~/.zen/tmp/${MOATS}/${TODATE}.priv)
echo "TODAY : ${myIPFS}/ipns/${TODATENS}"
2023-10-21 19:48:56 +02:00
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2023-10-30 13:25:08 +01:00
start=`date +%s`
2023-10-21 19:48:56 +02:00
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#~ ## IPFS GET ONLINE YESTERDATE SECTORNS
2024-02-09 16:28:24 +01:00
ipfs --timeout 240s get -o ~/.zen/tmp/${MOATS}/${SECTOR}/ /ipns/${YESTERDATENS}/
2023-10-21 19:48:56 +02:00
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2023-10-30 13:25:08 +01:00
end=`date +%s`
echo "_____SECTOR${SECTOR} GET time was "`expr $end - $start` seconds.
2023-10-21 19:48:56 +02:00
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
## CONTROL CHAIN TIME
ZCHAIN=$(cat ~/.zen/tmp/${MOATS}/${SECTOR}/CHAIN/_chain | rev | cut -d ':' -f 1 | rev 2>/dev/null)
ZMOATS=$(cat ~/.zen/tmp/${MOATS}/${SECTOR}/CHAIN/_moats 2>/dev/null)
[[ ${ZCHAIN} && ${ZMOATS} ]] \
&& cp ~/.zen/tmp/${MOATS}/${SECTOR}/CHAIN/_chain ~/.zen/tmp/${MOATS}/${SECTOR}/CHAIN/_chain.${ZMOATS} \
&& echo "UPDATING MOATS"
MOATS_SECONDS=$(${MY_PATH}/../tools/MOATS2seconds.sh ${MOATS})
ZMOATS_SECONDS=$(${MY_PATH}/../tools/MOATS2seconds.sh ${ZMOATS})
DIFF_SECONDS=$((MOATS_SECONDS - ZMOATS_SECONDS))
hours=$((DIFF_SECONDS / 3600))
minutes=$(( (DIFF_SECONDS % 3600) / 60 ))
seconds=$((DIFF_SECONDS % 60))
echo "SECTOR DATA is ${hours} hours ${minutes} minutes ${seconds} seconds OLD"
2024-02-09 16:28:24 +01:00
2023-10-21 19:48:56 +02:00
# >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
## CONTROL ACTINGNODE SWAPPING
UREFRESH="${HOME}/.zen/tmp/${MOATS}/${SECTOR}/CHAIN/SECTOR.refresher"
2023-10-23 15:06:58 +02:00
ALLNODES=($(cat ${UREFRESH} | grep -v '^[[:space:]]*$' 2>/dev/null)) # ${ALLNODES[@]} without empty line
2023-10-21 19:48:56 +02:00
STRAPS=($(cat ~/.zen/Astroport.ONE/A_boostrap_nodes.txt | grep -Ev "#" | rev | cut -d '/' -f 1 | rev | grep -v '^[[:space:]]*$')) ## ${STRAPS[@]}
if [[ ${ALLNODES[@]} == "" ]]; then
for STRAP in ${STRAPS[@]}; do
2023-10-23 15:06:58 +02:00
echo ${STRAP} >> ${UREFRESH} ## FILL SECTOR.refresher file with all STRAPS
2023-10-21 19:48:56 +02:00
done
ALLNODES=($(cat ${UREFRESH} 2>/dev/null)) # ${ALLNODES[@]}
fi
2023-10-23 15:06:58 +02:00
ACTINGNODE=${ALLNODES[0]} ## FIST NODE IN SECTOR.refresher
## IN CASE OLD BOOSTRAP IS STILL IN CHARGE - CHOOSE 1ST STRAP -
[[ ! $(echo ${STRAPS[@]} | grep ${ACTINGNODE}) ]] && ACTINGNODE=${STRAPS[0]}
2024-02-09 16:28:24 +01:00
## IF NOT UPDATED FOR TOO LONG : STRAPS[0] get key control
[ ${DIFF_SECONDS} -gt $(( 26 * 60 * 60 )) ] \
&& echo "More than 26H update" \
2023-11-02 01:33:05 +01:00
&& ACTINGNODE=${STRAPS[0]}
2023-10-21 19:48:56 +02:00
[[ "${ACTINGNODE}" != "${IPFSNODEID}" ]] \
&& echo ">> ACTINGNODE=${ACTINGNODE} is not ME - CONTINUE -" \
&& continue
2023-10-19 14:14:10 +02:00
2023-10-21 19:48:56 +02:00
### NEXT REFRESHER SHUFFLE
2023-10-26 16:00:52 +02:00
rm ${UREFRESH}
2023-10-21 19:48:56 +02:00
for STRAP in ${STRAPS[@]}; do
2023-10-26 16:00:52 +02:00
echo ${STRAP} >> ${UREFRESH} ## RESET SECTOR.refresher file with actual STRAPS
2023-10-21 19:48:56 +02:00
done
# SHUFFLE UMAP.refresher
cat ${UREFRESH} | sort | uniq | shuf > ${UREFRESH}.shuf
mv ${UREFRESH}.shuf ${UREFRESH}
2023-10-30 13:25:08 +01:00
echo "SETTING NEXT REFRESHER : $(cat ${UREFRESH} | head -n 1)"
2023-10-16 22:27:35 +02:00
##############################################################
2023-10-21 19:48:56 +02:00
## FEED SECTOR TW WITH UMAPS RSS
2023-11-10 02:27:01 +01:00
mkdir -p ~/.zen/tmp/${MOATS}/${SECTOR}/TW
2023-11-08 01:52:54 +01:00
INDEX="${HOME}/.zen/tmp/${MOATS}/${SECTOR}/TW/index.html"
2023-10-21 19:48:56 +02:00
## NEW TW TEMPLATE
2023-11-08 01:52:54 +01:00
[[ ! -s ${INDEX} ]] \
2024-01-14 19:05:53 +01:00
&& sed "s~_SECTOR_~${SECTOR}~g" ${MY_PATH}/../templates/twsector.html > ${INDEX} \
2024-01-04 12:27:19 +01:00
&& echo "REFRESHING SECTOR FROM empty TEMPLATE *****"
2023-10-16 22:27:35 +02:00
2023-11-08 01:52:54 +01:00
## SET SECTOR
sed -i "s~_SECTOR_~${SECTOR}~g" ${INDEX}
2023-10-19 14:14:10 +02:00
2023-10-21 19:48:56 +02:00
## GET ALL RSS json's AND Feed SECTOR TW with it
RSSNODE=($(ls ~/.zen/tmp/${IPFSNODEID}/UPLANET/__/_*_*/_${SLAT}*_${SLON}*/RSS/*.rss.json 2>/dev/null))
2023-10-21 19:48:56 +02:00
NL=${#RSSNODE[@]}
RSSWARM=($(ls ~/.zen/tmp/swarm/12D*/UPLANET/__/_*_*/_${SLAT}*_${SLON}*/RSS/*.rss.json 2>/dev/null))
2023-10-21 19:48:56 +02:00
NS=${#RSSWARM[@]}
2023-10-23 15:06:58 +02:00
combinedrss=("${RSSNODE[@]}" "${RSSWARM[@]}")
RSSALL=($(echo "${combinedrss[@]}" | tr ' ' '\n' | sort -u))
mkdir -p ~/.zen/tmp/${MOATS}/${SECTOR}/RSS
rm -f ~/.zen/tmp/${MOATS}/${SECTOR}/RSS/_all.json
2023-12-01 18:01:22 +01:00
################################## TRANSFER SIGNED TIDDLER IN SECTOR TW
2023-10-23 15:06:58 +02:00
for RSS in ${RSSALL[@]}; do
## Extract New Tiddlers and maintain fusion in Sector TW.
2023-10-21 19:48:56 +02:00
${MY_PATH}/../tools/RSS2UPlanetTW.sh "${RSS}" "${SECTOR}" "${MOATS}" "${INDEX}"
## create sector RSS _all.json
cat ${RSS} >> ~/.zen/tmp/${MOATS}/${SECTOR}/RSS/_all.json
2023-10-21 19:48:56 +02:00
done
TOTL=$((${NL}+${NS}))
2023-10-23 15:06:58 +02:00
##############################################################
# Update COIN & ZEN value
echo ${COINS} > ~/.zen/tmp/${MOATS}/${SECTOR}/COINS
echo ${ZEN} > ~/.zen/tmp/${MOATS}/${SECTOR}/ZEN
2023-10-17 21:01:04 +02:00
2023-10-30 13:25:08 +01:00
echo "Number of RSS : "${TOTL}
rm ~/.zen/tmp/${MOATS}/${SECTOR}/N_RSS* ## TODO REMOVE
echo ${TOTL} > ~/.zen/tmp/${MOATS}/${SECTOR}/N
2023-10-18 03:32:59 +02:00
###########################################################################################
## MAKE SECTOR PLANET WITH ASTONAUTENS LINKS
###########################################################################################
###########################################################################################
## PREPARE Ŋ1 WORLD MAP ##################################################################
echo "var examples = {};
examples['locations'] = function() {
var locations = {
" > ~/.zen/tmp/world.js
floop=1
SWARMTW=($(ls ~/.zen/tmp/swarm/*/UPLANET/__/_*_*/_${SLAT}*_${SLON}*/TW/*/index.html 2>/dev/null))
NODETW=($(ls ~/.zen/tmp/${IPFSNODEID}/UPLANET/__/_*_*/_${SLAT}*_${SLON}*/TW/*/index.html 2>/dev/null))
TWFILES=("${SWARMTW[@]}" "${NODETW[@]}")
for TWRED in ${TWFILES[@]}; do
ZMAIL=$(echo ${TWRED} | rev | cut -d '/' -f 2 | rev)
TWADD=$(cat ${TWRED} | grep -o "/ipns/[^\"]*" | sed "s/'$//")
[[ -z ${TWADD} ]] && TWADD=$(cat ${TWRED} | grep -o "/ipfs/[^\"]*" | sed "s/'$//")
## ADD ASTRONAUTNS ON SECTOR WORLD MAP
echo "${floop}: {
alpha: Math.random() * 2 * Math.PI,
delta: Math.random() * 2 * Math.PI,
name: '"${ZMAIL}"',
link: '"${TWADD}"'
}
," >> ~/.zen/tmp/world.js
((floop++))
done
# REMOVE la dernière virgule
sed -i '$ d' ~/.zen/tmp/world.js
##################################
## FINISH LOCATIONS
echo "
};
\$('#sphere').earth3d({
locationsElement: \$('#locations'),
dragElement: \$('#locations'),
locations: locations
});
};
" >> ~/.zen/tmp/world.js
IAMAP=$(ipfs add -qw ~/.zen/tmp/world.js | tail -n 1)
echo "JSON WISH WORLD READY /ipfs/${IAMAP}/world.js"
###########################################################################################
2024-02-04 13:29:40 +01:00
### APPLY ON APP MODEL TODATE REGIONNS LINKING
2024-02-06 12:45:46 +01:00
REGLAT=$(echo ${SLAT} | cut -d '.' -f 1)
REGLON=$(echo ${SLON} | cut -d '.' -f 1)
2023-12-01 18:01:22 +01:00
REGION="_${REGLAT}_${REGLON}"
2024-02-04 13:29:40 +01:00
TODATEREGIONNS=$(${MY_PATH}/../tools/keygen -t ipfs "${TODATE}${UPLANETNAME}${REGION}" "${TODATE}${UPLANETNAME}${REGION}")
2023-12-01 18:01:22 +01:00
PHONEBOOTH="${G1PUB::30}"
cat ${MY_PATH}/../templates/UPlanetSector/index.html \
2023-12-01 18:01:22 +01:00
| sed -e "s~_ZONE_~SECTOR ${SECTOR}~g" \
-e "s~_UPZONE_~REGION ${REGION}~g" \
-e "s~QmYdWBx32dP14XcbXF7hhtDq7Uu6jFmDaRnuL5t7ARPYkW/index_fichiers/world.js~${IAMAP}/world.js~g" \
2024-02-04 13:29:40 +01:00
-e "s~_ZONENS_~${TODATENS}~g" \
-e "s~_UPZONENS_~${TODATEREGIONNS}~g" \
-e "s~_SECTORG1PUB_~${G1PUB}~g" \
2024-01-03 15:25:27 +01:00
-e "s~_PHONEBOOTH_~${PHONEBOOTH}~g" \
2024-02-04 13:23:36 +01:00
-e "s~_LAT_~${REGLAT}~g" \
-e "s~_LON_~${REGLON}~g" \
2024-01-19 18:50:15 +01:00
-e "s~_EARTHCID_~${EARTHCID}~g" \
2024-01-07 22:13:47 +01:00
-e "s~_DATE_~$(date +%A-%d_%m_%Y)~g" \
2024-01-04 13:42:35 +01:00
-e "s~_UPLANETLINK_~${EARTHCID}/map_render.html\?southWestLat=${REGLAT}\&southWestLon=${REGLON}\&deg=0.1~g" \
-e "s~http://127.0.0.1:8080~~g" \
> ~/.zen/tmp/${MOATS}/${SECTOR}/_index.html
## TODO get from ~/.zen/tmp/${IPFSNODEID}/REGIONS/_${REGLAT}_${REGLON}.week.cid produced by REGION.refresh
# -e "s~_RWEEKCID_~/ipfs/QmY4rLRgSXjhhsW3WoKUJYpLe2A1dJCFXb7stNLcAp95w9~g" \
##################################
2024-01-02 13:54:24 +01:00
cp -f ~/.zen/tmp/${MOATS}/${SECTOR}/_index.html ~/.zen/tmp/${MOATS}/${SECTOR}/index.html
###########################################################################################
## ADD SECTOR ZENPUB.png & INFO.png
2024-01-04 00:11:50 +01:00
convert -font 'Liberation-Sans' \
-pointsize 80 -fill purple -draw 'text 50,120 "'"${ZEN} Zen"'"' \
-pointsize 30 -fill purple -draw 'text 40, 180 "'"${SECTOR}"'"' \
$MY_PATH/../images/G1WorldMap.png "${HOME}/.zen/tmp/${MOATS}/${SECTOR}.png"
# CREATE G1PUB AMZQR
amzqr ${G1PUB} -l H -p "$MY_PATH/../images/zenticket.png" -c -n ZENPUB.png -d ~/.zen/tmp/${MOATS}/${SECTOR}/
2024-01-04 00:11:50 +01:00
convert ~/.zen/tmp/${MOATS}/${SECTOR}/ZENPUB.png -resize 250 ~/.zen/tmp/${MOATS}/ZENPUB.png
# ADD IT
composite -compose Over -gravity NorthEast -geometry +0+0 ~/.zen/tmp/${MOATS}/ZENPUB.png ~/.zen/tmp/${MOATS}/${SECTOR}.png ~/.zen/tmp/${MOATS}/${SECTOR}/INFO.png
2023-12-06 01:23:47 +01:00
## zday marking
2023-12-31 15:20:11 +01:00
rm ~/.zen/tmp/${MOATS}/${SECTOR}/z* 2>/dev/null
2023-12-06 01:23:47 +01:00
ZCHAIN=$(cat ~/.zen/tmp/${MOATS}/${SECTOR}/CHAIN/_chain | rev | cut -d ':' -f 1 | rev 2>/dev/null)
echo "<meta http-equiv=\"refresh\" content=\"0; url='/ipfs/${ZCHAIN}' />${TODATE} ${SECTOR}" > ~/.zen/tmp/${MOATS}/${SECTOR}/z$(date +%A-%d_%m_%Y).html
2023-10-18 03:32:59 +02:00
###################################################### CHAINING BACKUP
2023-10-21 19:48:56 +02:00
IPFSPOP=$(ipfs add -rwq ~/.zen/tmp/${MOATS}/${SECTOR}/* | tail -n 1)
## DOES CHAIN CHANGED or INIT ?
[[ ${ZCHAIN} != ${IPFSPOP} || ${ZCHAIN} == "" ]] \
&& echo "${MOATS}:${IPFSNODEID}:${IPFSPOP}" > ~/.zen/tmp/${MOATS}/${SECTOR}/CHAIN/_chain \
&& echo "${MOATS}" > ~/.zen/tmp/${MOATS}/${SECTOR}/CHAIN/_moats \
&& IPFSPOP=$(ipfs add -rwq ~/.zen/tmp/${MOATS}/${SECTOR}/* | tail -n 1) && echo "ROOT was ${ZCHAIN}"
2023-10-18 03:32:59 +02:00
######################################################
echo "% START PUBLISHING ${SECTOR} ${myIPFS}/ipns/${TODATENS}"
2023-10-21 19:48:56 +02:00
start=`date +%s`
ipfs name publish -k ${TODATE}${G1PUB} /ipfs/${IPFSPOP}
ipfs key rm ${TODATE}${G1PUB} ${YESYERDATE}${G1PUB} ${G1PUB} > /dev/null 2>&1
2023-10-21 19:48:56 +02:00
end=`date +%s`
2023-10-23 15:06:58 +02:00
echo "_____SECTOR${SECTOR} PUBLISH time was "`expr $end - $start` seconds.
2023-10-18 03:32:59 +02:00
######################################################
###################################################
## EXTRACT SECTOR LAST WEEK TIDDLERS TO IPFSNODEID CACHE
2024-01-16 15:02:26 +01:00
echo "(☉_☉ ) ${REGION}.week.rss.json (☉_☉ )"
mkdir -p ~/.zen/tmp/${IPFSNODEID}/SECTORS/
rm -f ~/.zen/tmp/${IPFSNODEID}/SECTORS/${SECTOR}.week.rss.json
## CREATING 7 DAYS JSON RSS STREAM
tiddlywiki --load ${INDEX} \
--output ~/.zen/tmp/${IPFSNODEID}/SECTORS --render '.' "${SECTOR}.week.rss.json" 'text/plain' '$:/core/templates/exporters/JsonFile' 'exportFilter' '[days:created[-7]!is[system]!tag[G1Voeu]]'
## TODO FILTER INFORMATION WITH MULTIPLE SIGNATURES (DONE in REGION.refresh.sh)
## TODO EXPORT AS RSS ## https://talk.tiddlywiki.org/t/has-anyone-generated-an-rss-feed-from-tiddlywiki/966/28
done
exit 0