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
|
# Ligi centralne PZBS - koordynacja
Zestaw skryptów do obsługi lig centralnych PZBS.
Podzielony na kilka modułów, każdy z nich wywoływany jako osobny *target* polecenia `make`.
Moduły czytają część konfiguracji ze zmiennych środowiskowych. Przykładowy zestaw zmiennych używanych w projekcie znajduje się w pliku `.envrc.sample`.
W repozytorium są podmoduły, pamiętaj o `git submodule update --init --recursive` po wyciągnięciu tego kodu.
## Kopie zapasowe stron z wynikami
Moduł tworzy w katalogu `http` kopie zapasowe plików wyników, ściagane z serwera. W założeniu - ma to robić bez interakcji z użytkownikiem.
Opcjonalnie, dostarcza również skryptu, który równie bezobsługowo wersjonuje zmiany w repozytorium Git.
### Wymagania wstępne
* dostęp do serwera wyników po SSH
* rsync
* opcjonalnie: git
### Wywołanie
Kopia zapasowa:
`make pull`
Kopia zapasowa z wersjonowaniem zmian:
`make autocommit`
### Konfiguracja
Zmienne środowiskowe:
* `LIGA_REMOTE_WWW_DIR`: kopletna zdalna ścieżka do backupu (`user@serwer:/ścieżka`)
* `LIGA_RSYNC_OPTS`: dodatkowe parametry wywołania programu `rsync` (np. wczytujące klucz prywatny do uwierzytelnienia)
W przypadku wersjonowania kopii zapasowych, w katalogu wyjściowym `http` musi byćzainicjowane repozytorium Git ze skonfigurowanym zdalnym repozytorium docelowym.
## Kopie zapasowe baz danych turniejów
Moduł wczytuje do lokalnie skonfigurowanej bazy danych, zrzuty baz turniejów, dostarczane przez sędziów w kotłach.
Wprowadza do zrzutów często potrzebne poprawki (jak np. uzupełnienie tabeli `logoh`), a także umożliwia zdefiniowanie własnych poleceń, wykonywanych na każdej z baz danych po jej wgraniu ze zrzutu.
### Wymagania wstępne
* s3cmd
* klient MySQL
Zrzuty baz danych muszą zostać niezależnie pozyskane od sędziów poszczególnych kotłów i wrzucone do jednego wiaderka S3, np. używając [Spedytora](https://github.com/emkael/spedytor/).
### Wywołanie
`make dumps`
### Konfiguracja
Zmienne środowiskowe:
* `LIGA_MYSQL_CONNECTION_OPTS`: komplet przełączników polecenia `mysql` pozwalający podłączyć się do docelowego (lokalnego) serwera MySQL
* `LIGA_S3_BUCKET`: URI wiaderka S3, w którym trzymane są zrzuty
Pliki konfiguracyjne:
* `dumps/.s3config`: konfiguracja klienta `s3cmd`, można wygenerować ją poleceniem `s3cmd --configure -c dumps/.s3config`
* `dumps/.mapping`: mapowanie nazw plików zrzutów na docelowe bazy danych, do których zrzuty są wgrywane, każdy wiersz to jeden turniej, w każdym wierszu najpierw pojawia się nazwa bazy danych, a następnie, po odstępie, nazwa pliku relatywna względem `./dumps/` (domyślnie zrzuty trafiają do katalogu `./dumps/sync/`)
* `dumps/.queries`: spis poleceń SQL wykonywanych na każdej bazie danych po wgraniu jej do lokalnego serwera, po jednym poleceniu na wiersz
## Moduł butlera
Zbija wiele turniejów w jeden, w celu wyliczenia wspólnego butlera.
### Wymagania wstępne
* python, wersji dowolnej (testowane pod 2.7.18 i 3.8.6)
* klient MySQL
* założony prawidłowo w pakiecie JFR Teamy turniej docelowy dla wspólnej klasyfikacji (choć jego parametry startowe - liczba teamów, stołów itp. nie muszą być wcześniej poprawnie ustawione)
### Wywołanie
`make butler`
Wywołany zostanie również moduł synchronizujący i ładujący zrzuty baz danych.
Ręczne wywołanie samego scalania polega na uruchomieniu skryptu `butler/butler.py` z parametrem odpowiadającym właściwemu zestawowi zbijanych turniejów (patrz: Konfiguracja poniżej) i wgraniu wynikowego skryptu SQL do docelowego serwera bazy danych.
Na tak spreparowanym turnieju docelowym trzeba później **ręcznie** (tj. JFR Teamy Adminem) dokonać zamknęcia niezamkniętych rund (wtedy odbywa się właściwe przeliczanie łącznego butlera) oraz wysłania stron statycznych.
### Konfiguracja
Zmienne środowiskowe:
* `LIGA_MYSQL_CONNECTION_OPTS`: komplet przełączników polecenia `mysql` pozwalający podłączyć się do docelowego (lokalnego) serwera MySQL
* `LIGA_BUTLER_FINISHED_ROUND`, `LIGA_BUTLER_FINISHED_SEGMENT`: opcjonalne, jeśli ustawione, docelowy turniej cofany jest tylko do zdefiniowanego momentu, a nie do samego początku (żeby nie przeliczać wszystkich rund po kolei za każdym razem)
Plik konfiguracyjny `config.json`:
* plik formatu JSON, zawierający obiekt słownikowy
* klucz `__groups` określa nazwy "grup", tj. prefiksy, które są doklejane do nazw teamów w wynikowym turnieju, jeśli chcemy w zbiorczym butlerze rozróżnić, skąd pochodzą źródłowe drużyny - jest to prosty słownik wartości `"baza_danych": "prefiks"`
* klucz `__queries` określa dodatkowe polecenia SQL, które wykonywane są na **źródłowej** bazie danych przed poleceniami wklejającymi dane do bazy docelowej, może służyć np. do ustawienia BYEów czy korekty nierównolicznych grup, zaleca się modyfikować wyłącznie tabele, dla których w trakcie zbijania tworzone są **kopie** (prefiksowane podkreślnikiem, np. `_matches` czy `_teams`) - i działać na tych kopiach - jest to słownik formatu `"baza_danych": ["polecenie_1", "polecenie_2"]`
Pozostałe klucze słownika w `config.json` przyjmują następującą postać:
```
"identyfikator_turnieju": {
"source": [
"źródłowa_baza_danych_1",
"źródłowa_baza_danych_2",
"źródłowa_baza_danych_3"
],
"output": "docelowa_baza_danych"
}
```
W takiej konfiguracji `identyfikator_turnieju` jest parametrem wywołania skryptu `butler/butler.py`, a źródłowe turnieje zbijane są w zdefiniowanej kolejności i umeiszczane w docelowej bazie danych.
Dodatkowo, w pliku `butler/butler.py` zakładane są następujące maksymalne rozmiary turniejów źródłowych:
* zmienna `TABL_STEP` (liczba stołów w turnieju): 8
* zmienna `TEAM_STEP` (liczba teamów w turnieju): 16
* zmienna `PLAYER_STEP` (liczba zawodników w turnieju): 400
## "Australijskie" butlery
Moduł zewnętrzny, liczący i wysyłający butlery znormalizowane dla określonych turniejów.
Szczegółowa dokumentacja: [pzbs-liga-ausbutler](https://github.com/emkael/pzbs-liga-ausbutler).
### Wywołanie
`make ausbutler`
Przeliczone zostaną wszystkie butlery zdefiniowane w podmodule `pzbs-liga-ausbutler` (z katalogu `ausbutler`).
|