-------------------------------------------------------------------------------
				PLIKI	DOIT_X
-------------------------------------------------------------------------------
README: plik DOIT_H oraz DOIT_H

int mk_doitN(void) oraz int mk_doitN(void)
	//1.Pobiera tylko jendo zadanie z TODO_N i kasuje go w kolejce TODO_N (tak samo robi to z TODO_H)
	//2.Sprawdza konfiguracje w MT
	//3.Przewiduje czas transportu danych (linia pierwsza zawiera ocene czy warto wlaczac nowy trig lub node)
	//4.Sprawdza konfiguracje wlaczenia
	//5.Tworzy plik /mnt/tmp/DOIT_N lub /mnt/tmp/DOIT_H

format pliku DOIT_N oraz DOIT_H:
---------------------------------------- /mnt/tmp/DOIT_X ----------------------
linia1: 1 #jesli 1 to oznacza, ze lepiej wlaczyc nowy trig lub node,0-czas jest mniejszy niz boot
linia2: TRIGG0001&N001&D14&ARCHI0001&FN=000000000001&ID=2211190&ORDER=1404252170:260640283&
linia3: 10012 #uklad onoff: trig,node,disk,buffer
linia4: TRIGG0001&N002&D14&ARCHI0001&FN=000000000001&ID=2211190&ORDER=1404252170:260640283&
linia5: 11012 #uklad onoff: trig,node,disk,buffer1,buffer2
....
jesli jest wiecej kopii zostalo zapisane w ARCHI
-------------------------------------------------------------------------------

Uwaga, jesli brak jest druiego bufora w konfiguracji zasobnika to w liniach: 3 i 5 jest wartosc 2;

jesli zostaly pobrne wszystkie linie TODO to w pliku DOIT_N bedzie zapis "NOTASK"
--------------------------------------------------------------------------------
WRITE; plik DOIT_W

int mk_doitW(void)

	//1.Pobiera linie z TODO_W i kasuje ja w pliku TODO_W
	//2.Sprawdza zajetosc nodow dla triggerow zwiaznych z ARCHI
	//3.Przypisuje triger i nody w ktorych mozna umiescic pliki
	//4.Pokazuje stan wlaczenia systemu (wazne w tej fazie sa tylko bufory)

przykladowy pllik /mnt/tmp/DOIT_W 
(jesli ARCHIxxxx jest zwiazane z trzema triggerami:TRIGG0001,TRIGG0002,TRIGG0003)


TRIGG0001&ARCHI0001&FN=201501050003&AT=PUB&ME=ON&CP=002&ID=2211194&ORDER=1415051665:556300286&
002
TRIGG0002&ARCHI0001&FN=201501050003&AT=PUB&ME=ON&CP=002&ID=2211194&ORDER=1415051665:556300286&
112
TRIGG0003&ARCHI0001&FN=201501050003&AT=PUB&ME=ON&CP=002&ID=2211194&ORDER=1415051665:556300286&
112

linie z zapisem "112" zawieraja informacje o stanie wlaczenia zasobnikow.
kolejnosc wlaczenia: TRIG,BUF1,BUF2.
"2" oznacza, ze BUF2 nie jest zamontowany w systemie lub excluded tzn. nie jest dostepny.

Uwaga! klient moze zglosic CP=xxx (liczbe kopii pliku zapisanego w roznych nodach).
Jesli administrator ustalil limit w pliku /home/SYSQS/TRIGGxxxx/SYSTEM.config
COPY=002, a klient wpisal CP=003 to wartosc zostanie skorygowana na CP=002.


-------------------------------------------------------------------------------
			TRIGG0001.onoff 
 		tablica on/off poszczegolnych elemtnow 

kolumna |   0   |   1   |  2   |  3   | ... | 9   | 10  | 
|--------------------------------------------------------
linia1  | TRIGG |  BUFF1|  BUF2|
linia2  | node1 |   D11 |  D12 |  ....|.....| D24 |  D25|
linia2  | node2 |   D11 |  D12 |  ....|.....| D24 |  D25| 
                ........
liniaN  | nodeN |   D11 |  D12 |  ....|.... | D24 |  D25| 
 
TRIGG - 0,1,2
BUF   - 0,1,2
node  - 0,1,2,3,4
Dxx   - 0,1,2,5

(9 - bledna dana np. nazwa lub przekroczenie zakresu niezgodne z SYSTEM.config
"9" moze pojawic sie tylko w czasie testow oprogramowania - wartos niedopuszczalna
i wskazuje, ze sytem dziala nieporawnie lub jest blednie skonfigurowany tzn. blad
oprogrmowania. Problem moze pojawic sie tylko w przypadu jesli zostanie wpisany 
nr. NODE, ktory nie zostal zarejestrowany w systemie tzn. zarejstrowanych jest 3 NODES
a wpisany zostanie N015, wowczas zwoci 9. Blad ten moze pojawic sie tylko podczas testow
oprogrmowania i nie moze wystapic podczas dzialania operacyjnego)


0 - OFF
1 - ON
2 - excluded (wycofany i nie mozna wlaczyc)
3 - pomoc sasiedzka 1-szego sasiada
4 - pomoc sasiedzka 2-go sasiada
5 - dysk zarerwowany dla regeneracji
przykladowo plik po zamontowaniu wyglada nastepujaco dla konfiguracji
1xBUFF, 3xNODES, 1xCONTROLLER
(wszytkie sa OFF)
00
00000000005
00000000005
00000000005
(UWAGA! edit_trig musi byc uzyty tylko kiedy zasobnik jest w stanie OFF)
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
		Pliki tworzne podczas przetwarzania danych
--------------------------------------------------------------------------------
/home/ARCHI00/DOITMW/DOIT_MV - wynik dzialania funkcji mk_doitW(); 
Jest uzywany przez funkcje doit_MV() podczas przenoszenia plikow z BUF --> NODE

/home/ARCHI00/DOITMW/STATUS_W - kopia bezpieczenstwa jesli system bedzie po
reboot. Plik jest przenoszony do /mnt/tmp/STATUS_W. Plik zawiera dane odpowiedzi
na pytanie klienta o status zamowienia WRITE. Jesli klient odesle potwierdzenie 
(OP=25) to spwowoduje wywolanie doit_MV i czynnosci przenoszenia pliku 
z BUFFOR do NODES. Operacja bedzie powtorzona CP=x razy (tyle ile jest dopuszonych
kopi zapisow w roznych nodach. Jesli sa podane dwa adresy to oznacza,  ze klient
moze przeslac dane do drugiego zasobnika (2-krotna redundancja). Liczbe kopi ustala
admin podczas instalacji systemu. Raczej nie nalezy zmieniac CP. Defult CP=003, co 
oznacza, ze w jednym zasobniku moga sie znalezc 3 kopie plikow. 

-------------------------------------------------------------------------------
			Plik /home/SYSQS/TRIGGxxxx/REGEN
-------------------------------------------------------------------------------
Zawiera inforamcje o przemieszczeniu dyskow po regneracji.
Format pliku:
NODE&N001&
D11=D12
D12=D13
D13=D14
D14=D15
D15=D21
D21=D22
D22=D23
D23=D24
D24=D25
D25=D11
NODE&N002&
D24=D25

Uwaga mozna wpisywac stan wszystkich dyskow w nodach lub tez tylko podac:
NODE&Nxxx&
Dxx=Dyy
tzn. nie jest koieczne podawanie wszystkich Dxx, a jedynie tylko zamienione 
po regneracji.
Uwaga. jesli brak jest tego pliku to wowczas Dxx jest pobierany taki jaki
zostal zapisany w MT.
-------------------------------------------------------------------------------
===============================================================================






===============================================================================
				      doit.c
===============================================================================

source: doit.c
aplikacja: doit 
Aplikaja jaet wywolywna przez proces nadrzedny fork()

Parametry wejsciowe:
argv[0] - "doit"
argv[1] - process 
argv[2] - pierwszy parametr procesu (jesli bezparametrowy to null)
argv[3] - drugi parametr procesu (jesli bezparametrowy to null)
argv[4] - trzeci parametr procesu (jesli bezparametrowy to null)


-------------------------------------------------------------------------------
wykonuje DOIT_X:
-------------------------------------------------------------------------------
uzycie: doit DOIT_H

funkcja: mk_doitH(...);
zdejmuje linie ze stosu /mnt/tmp/TODO_H  i przetwarza ja na postac DOIT_H
wynik jest zapisywany do pliku /mnt/tmp/DOIT_H oraz do 
do katalogu /home/ARCHII00/DISASTER_RECOVERY
-------------------------------------------------------------------------------
uzycie: doit DOIT_N
funkcja: mk_doitN();
zdejmuje linie ze stosu /mnt/tmp/TODO_N  i przetwarza ja na postac DOIT_N
wynik jest zapisywany do pliku /mnt/tmp/DOIT_N oraz do 
do katalogu /home/ARCHII00/DISASTER_RECOVERY
-------------------------------------------------------------------------------
uzycie: doit DOIT_W 
//mk_doitW();
zdejmuje linie ze stosu /mnt/tmp/TODO_N  i przetwarza ja na postac DOIT_W
wynik jest zapisywany do pliku /mnt/tmp/DOIT_W oraz do 
do katalogu /home/ARCHII00/DISASTER_RECOVERY
DOIT_W jest potrzebne do wstawienia zadania do .listRW
-------------------------------------------------------------------------------
uzycie: doit DOIT_M filesize  
parametr filezise musi byc podany jak string
//mk_doitM(); MOVE BUF -> NODE
zdejmuje linie ze stosu /mnt/tmp/TODO_N  i przetwarza ja na postac DOIT_M
wynik jest zapisywany do pliku /mnt/tmp/DOIT_M oraz do 
do katalogu /home/ARCHII00/DISASTER_RECOVERY
uzywane przy przenoszeniu plikow z BUFFORa do NODE
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
CHECK SYSTEM:
-------------------------------------------------------------------------------
uzycie: doit "SYSTEM" TRIGGxxxx"
check_system("TRIGGxxxx")
wynik est zwracany do pliku: /mnt/tmp/DOIT_REPLY
funkcja jest przeznaczona dla admina

plik DOIT_REPLY bedzie zawieral nasepujace dane:
line01:  TRIGG=triggername -  
line02:  trigg_redun=trigg_redun - redundatny CONTROLLER (moze byc niezamontowmny)
line03:  nr_nodes=nr_nodes - liczba zamontoanych NODEs
line04:  nr_buffers=nr_buffers - liczba zamontowanych BUFFERS (max 2)
line05:  1_bufR=first_bufR_freespace - NULL jesli buf zapchany
line06:  1_bufW=first_bufW_freespace 
line07:  2_bufR=second_bufR_freespace //NULL jesli brak bufora
line08:  2_bufW=second_bufW_freespace   //lub buf jest zapchany
line09:  nr__nodes_with_freespace=nr_nodes_with_freespace
line10:  trig_on=time_trig_on
line11:  node_on=time_node_on
line12:  buff_on=time_buff_on
line13:  trig_off=time_trig_off
line14:  node_off=time_node_off
line15:  buff_off=time_buff_off
line16:  rate=rate_sustain
-------------------------------------------------------------------------------

uzycie: doit VIS ARCHI0001
Sprawdzanie calego systemu na podstawie danych w katalogu:
/home/SYSQS/TRIGxxxxx/
funcja moze byc uzyta tylko z poizomu Linuxa i nie jest dostepna dla admina
//vis_chk_state_system("ARCHIxxxx")   
wynik est zwracany do pliku: /mnt/tmp/DOIT_REPLY


uzycie:  doit TIMELIMIT TRIGG0001
funckja pokazuje stan aktualnego wlacznie zasobnika on/off systemu
//system_config("TRIGG0001"); 
wynik jest zwracany do pliku /mnt/tmp/DOIT_REPLY
line01:  trig_on=time_trig_on
line02:  node_on=time_node_on
line03:  buff_on=time_buff_on
line04:  trig_off=time_trig_off
line05:  node_off=time_node_off
line06:  buff_off=time_buff_off
line07:  rate=rate_sustain
-------------------------------------------------------------------------------


-------------------------------------------------------------------------------
FREE SPACE
-------------------------------------------------------------------------------
BUFOR
prownuje przestrzen bufora (dyski) z wielkoscia wprowadzanego pliku
//argv[1] argv[2] argv[3] argv[4]
uzycie: doit [CMPBUF] [trigname] [name_buf] [size_file_in string_form]
np.:
uzycie: doit CMPBUF trigname first_bufW "300"
uzycie: doit CMPBUF trigname first_bufR "300"
uzycie: doit CMPBUF trigname second_bufW "30000"
uzycie: doit CMPBUF trigname second_bufR '3000" 
//cmp_bufor_freespace("first_bufR","300")
zwraca do pliku /mnt/tmp/DOIT_REPLY
FREE lub BUSY
-------------------------------------------------------------------------------
NODE/DISK - Poszukuje dysku do zapisu z wolna przestrzenia
sprawdzanie przestrzenie na dyskach
doit [FREEDISK] [TRIGGxxxx] [nodename] [filesize_to_write]
uzycie: doit FREEDISK  TRIGG0001 N001 "200" 
//disk_free_space("TRIGG0001","N001","200",disk);
zwraca nazwe wolnego dysku lub BUSY
zapis do pliku /mnt/tmp/DOIT_REPLY
-------------------------------------------------------------------------------


-------------------------------------------------------------------------------		
ONOFF
-------------------------------------------------------------------------------
TRIGGER
uzycie: doit [ONOFF_T] [TRIGGxxxx]
//check_state_onoff_trig(triggername);
sprawdzanie stanu wlaczenia triggera 
zapisuje odpowiedz do pliku /mnt/tmp/DOIT_REPLY

BUFFOR
uzycie: doit [ONOFF_B] [TRIGGxxxx] [Bxxx]
//check_state_onoff_buff(triggername,"B001");
sprawdza stan wlaczenia buforow 
zapisuje odpowiedz do pliku /mnt/tmp/DOIT_REPLY

NODE
uzycie: doit [ONOFF_N] [TRIGGxxxx] [Nxxx]
//check_state_onoff_node(triggername, "N001");
sprawdza stna wlaczenie NODE
zapisuje odpowiedz do pliku /mnt/tmp/DOIT_REPLY

DISK
uzycie: doit [ONOFF_D] [TRIGGxxxx] [Nxxx] [Dxx]
Dxx {D11 ... D25}
//check_state_onoff_disk(triggername, "N001", "D15");
sprawdza stan wlczenia dysku Dxx
zwraca do /mnt/tmp/DOIT_REPLY
-------------------------------------------------------------------------------


-------------------------------------------------------------------------------
Pobieranie METRYCZEK
-------------------------------------------------------------------------------
uzycie: doit [MT] [ARCHIxxxxx] [filename] 
np.: doit MT "000000000001" ARCHI0001
kopiowanie MT do /mnt/tmp/DOIT_REPLY
//copy_met_MT("000000000001", "ARCHI0001");
jesli byl blad lub brak pliku albo ARCHIxxxx to 
w /mnt/tmp/DOIT_REPLY bedzie zapis NOMT


uzycie: doit [RE] [ARCHIxxxxx] [filename]
np.: doit RE "000000000001" ARCHI0001
kopiowanie RE do /mnt/tmp/DOIT_REPLY
//copy_met_RE("000000000001", "ARCHI0001")
jesli byl blad lub brak pliku albo ARCHIxxxx to 
w pliku /mnt/tmp/DOIT_REPLY bedzie zapis NORE

uzycie: doit [ML] [ARCHIxxxxx] [filename]
np.: doit ML "000000000001" ARCHI0001
kopiowanie ML do /mnt/tmp/DOIT_REPLY
//read_data_ML("ARCHI0001", "000000000001");
zwraca do pliku /mnt/tmp/DOIT_REPLY 
zapis - NOML jesli nie bedzie takigo pliku lub ARHIC
oraz jesli odczyta metryczke to zwoci
line:  metryczka_ML.MLname - nazwa pliku
line:  metryczka_ML.MLtype - ML (typ metryczki)
line:  metryczka_ML.MLrange - PRI/PUB/CON
line:  metryczka_ML.MLlen  - rozmiar pliku
line:  metryczka_ML.MLmeta - METAON/METAOF
line:  metryczka_ML.MLowner - OWNER
line:  metryczka_ML.MLarch - nazwa ARCHI
line:  metryczka_ML.MLmd5 - suma md5

-------------------------------------------------------------------------------


-------------------------------------------------------------------------------
przypisanie dysku logicznego do fizycznego
-------------------------------------------------------------------------------

//przypisanie dysku logicznego do fizycznego (zmienia sie po regeneracji)
uzycie: doit [REGENDISK] [TRIGGxxxx] [Nxxx] [Dxx]  
//chk_REGEN("TRIGG0001", "N002", "D11",new_disk);
przypisanie pobierane jest z pliku /home/SYSQS/TRIGGxxxx/REGEN
jesli brak tego pliku lub przypisanie jest nie bedzie uwzlednione w REGEN to 
w pliku/mnt/tmp/DOIT_REPLY dysk_logiczny == dysk_fizyczny
jesli bedzie uwzgledniona zmiana po regeneracji to pojawi sie nazwa 
dysku fizycznego. 
Wszystkie zapisy nalezy robic dla dyskow logiczny, a jedynie on/off
bedzie wymagal sprawdzenia przypisania dysk logiczny do fizcznego.


-------------------------------------------------------------------------------
kasowanie DOIT_REPLY
-------------------------------------------------------------------------------
uzycie: doit DEL
kasuje plik DOIT_REPLY w katalogu /mnt/tmp/
-------------------------------------------------------------------------------


-------------------------------------------------------------------------------
jesli operacja nie zostanie rozpoznana 
-------------------------------------------------------------------------------
izapisze DOIT_REPLY "ERROR: incorrect input data"

===============================================================================








