Jutalomelosztó Rendszer
Projekt célja és áttekintése
A Jutalomelosztó Rendszer automatizálja a partnerek szavazási aktivitása alapján járó jutalmak kiszámítását és kiosztását. Fő felhasználói a partnerprogram üzemeltetői és maguk a partnerek. A rendszer célja a részvételen alapuló, igazságos, átlátható és auditálható jutalomelosztás biztosítása, rögzített és dinamikus szabályok keverékével.
Cél:
- Óránkénti és napi jutalomszámítás automatizálása
- Szavazók részvételének és jogosultságának nyomon követése
- Eredmények mentése MySQL adatbázisba audit és riport céljából
- Speciális partnerek kezelése egyedi jutalmazási logikával
- Naplózás, monitorozás és biztonságos újraindítás támogatása
Architektúra
Fő komponensek
- distribute.py: Fő logika, ütemező, és a
RewardCacheosztály - db.py: MySQL kapcsolatkezelő
- config.py: Adatbázis és rendszer konfiguráció
- conf_log.py: Naplózás beállítása
- loader.py: Adatbetöltő segédletek
Komponensek kapcsolata
- A
RewardCacheszervezi a jutalomszámítást, adatbázis műveleteket és naplózást - Az db.py-ban lévő
MySQLConnectionManager-t használja minden DB eléréshez - A konfiguráció és naplózás a megfelelő modulokból töltődik be
Adatfolyam
- A szavazási adatok az adatbázisból kerülnek beolvasásra
- A jutalom alapokat frissítik a legutóbbi szavazások és CC árfolyam alapján
- Az óránkénti és napi jutalmak kiosztása többszintű logika szerint történik
- Az eredmények MySQL táblákba kerülnek mentésre audit és további feldolgozás céljából
- Speciális partnerek további jutalmat kapnak
- Minden főbb művelet naplózásra kerül
Adatbázis
Fő táblák és sémák
| Tábla | Leírás | Kulcs mezők |
|---|---|---|
reward_list_hourly | Óránkénti jutalmak tárolása | partner_id, position, time, hourly_reward_top10p, hourly_reward_top10, hourly_reward_top100, hourly_reward_top1000, hourly_reward_all |
reward_list_daily | Napi jutalmak tárolása | partner_id, position, time, daily_reward_top10, daily_reward_top100, daily_reward_top1000, daily_reward_top10000, daily_reward_all, daily_reward_top10p_ecc, daily_reward_top50p, cc_market_reward |
reward_pool_state | Felhalmozott napi jutalmak követése | day, accumulated_daily_pool |
reward_log | Minden elosztás audit naplója | reward_day, reward_hour, total_reward_cc, ... (különböző számok és összegek) |
reward_distribution_logs | Minden elosztás JSON naplója | reward_type, timestamp, total_amount, user_counts, ecc_cap |
cc_hourly | Speciális partnerek jutalmai | partner_id, cc_reward, time |
Adatbázis elérés
- Olvasás: Szavazási adatok, CC árfolyamok és előző állapotok SQL lekérdezéssel
- Írás: Jutalmak, naplók és állapotok upsert és insert műveletekkel
- Speciális partnerek: Óránk énti jutalmak összegezve, távoli adatbázisba továbbítva
Jutalmazási logika
Óránkénti jutalmak
- Az alap 5 egyenlő kategóriára oszlik: legjobb 10%, legjobb 10, legjobb 100, legjobb 1000, mindenki
- A jutalmak kiosztása a partner helyezése alapján történik
- Jogosultság: Csak az utolsó órában szavazók vehetnek részt
Napi jutalmak
- Az ECC limit a legjobb 10% partnerek átlagos ECC-jének 5-szöröse
- Az alap felosztása:
- Fix helyezésű jutalmak (felső kategóriák, minimum szavazatszám szükséges)
- ECC-alapú jutalmak (korlátozott ECC súlyozással)
- Legjobb 50% részvételi jutalom
- CC piaci árfolyam bónusz
- Jogosultság: Minimum szavazatszám és részvételi küszöb
Speciális partnerek
- A
SPECIFIC_PARTNERSlistában lévő partnerek óránkénti jutalma összegezve, távoli adatbázisba kerül
Ütemezés és automatizálás
- A
schedulekönyvtárat használja időzített futtatáshoz - Óránkénti jutalmak: minden óra :30-kor
- Napi jutalmak: minden nap 00:00:35-kor
- Teszt mód:
TEST = Trueadistribute.py-ban egyetlen ciklushoz - Kíméletes leállítás és folyamatkövetés a
processes.jsonés szignálkezelők segítségével - Hibák: tranzakciók visszagörgetése, hibák naplózása, állapot mentése újraindításhoz
Konfiguráció és környezet
- config.py: Adatbázis kapcsolatok és rendszerparaméterek
- conf_log.py: Naplózás konfiguráció
- .env: (Opcionális) érzékeny adatok környezeti változókban
- Az adatbázis elérési adatait és tábla neveket a
config.py-ban kell beállítani
Naplózás és monitorozás
- Minden főbb művelet és hiba naplózása fájlba (lásd
logs/könyvtár) - Jutalomelosztások naplózása a
reward_distribution_logstáblába is - Partnerenkénti szavazatszámok részletes naplózása DEBUG szinten
- Kíméletes leállítás és napló flush szignálkezelőkkel
Bővítés és testreszabás
- Új jutalom kategóriák vagy logika módosításához a
calculate_hourly_rewardéscalculate_daily_rewardfüggvényeket kell módosítani aRewardCache-ben - Új partner típusok vagy szavazási szabályok támogatásához SQL lekérdezések és jutalomkiosztás módosítása szükséges
- Új naplózás vagy monitorozás hozzáadásához bővítsd a
log_distribution-t vagy adj hozzá új naplóhívásokat
Üzemeltetés
- Követelmények: Python 3.8+, MySQL, függőségek a
requirements.txt-ben - Telepítés:
python distribute.pyfuttatása ütemezett szolgáltatásként - Leállítás/Újraindítás: Folyamatkövetés a
processes.json-ban, szignálkezelők a biztonságos leállításhoz - Frissítés: Állítsd le a szolgáltatást, frissítsd a kódot/függőségeket, indítsd újra
Tesztelés
- Egységtesztek a
test_calc.py-ban - Teszt mód:
TEST = Trueadistribute.py-ban - Teszt adatbázisok és mock adatok használata biztonságos teszteléshez
- Teljesítménytesztek nagy adathalmazokkal