Yleistä

Tämä ohje ei pyri olemaan kattava, vaan paremminkin tajunnanvirtaa kehitysosastolta ;)

ViHassa käytettyjä termejä:

TermiMerkitys
AlueMaantieteellinen alue, johon voi kuulua esimerkiksi operaatioita, kalustoa jne.
HenkilöLuonnollinen henkilö, joka ottaa osaa toimintaan. Henkilö voi kuulua korkeintaan yhteen ryhmään.
HälytysryhmäYhteen järjestöön kuuluvista henkilöistä koostuva ryhmä, joka ottaa osaa operaatioon.
JärjestöJokainen henkilö kuuluu yhteen järjestöön. Järjestöt saapuvat operaatioihin yksitellen.
OperaatioEtsintä, ensiapupäivystys tai vastaava tapahtuma. Operaatiossa voi olla mukana useita ryhmiä ja henkilöitä.
SijaintiRyhmä on aina jossakin paikassa, jota kuvataan termillä sijainti.
RyhmäOperaatiossa toimiva yksikkö, toimintaryhmä. Ryhmä kuuluu yhteen operaatioon.
TilaRyhmä ja henkilö ovat aina jossakin tilassa, joka kuvaa kulloinkin tapahtuvaa toimintaa. Ks. Tilat
KalustoViestivälineet ja tavarat (muu kalusto). Keskenään samanlaiset on eriteltävä tunnisteella (juokseva numero tms).
ViestivälineetRadiolaitteet ja muu sellainen kalusto, joka toimii pääasiallisesti yhdessä tietyssä viestiverkossa (esim. antennit)
TavaratKalusto, joka ei ole viestivälineitä.

Tekniikkaa

Tuotantoympäristössä ViHaa käytetään normaalisti SSL-suojatulla yhteydellä. Testiympäristössä ja tilanteen niin vaatiessa voidaan käyttää salaamatontakin yhteyttä.

Käyttäjätunnuksia ei välttämättä tarvita kuin yksi, mutta jäljitettävyyden takia olisi suotavaa että ne olisivat henkilö- tai roolikohtaisia. Sama käyttäjä voi ongelmitta käyttää järjestelmää monesta eri paikasta.

Ohjelmistoa on kehittänyt vuodesta 2003 saakka Riku Kalinen, OH2RK. Arvokasta palautetta on tullut kaikilta käyttäjiltä.

Ohjelmisto on palvelin-asiakaspohjainen. Asiakasohjelmistona voi toimia lähes mikä hyvänsä WWW-selain millä hyvänsä alustalla.

Käytettävän selaimen on tuettava evästeitä (cookies) ja taulukoita. Taulukoiden suhteen riittää, jos niiden sisältö pystytään näyttämään. Lähes kaikki markkinoilla olevat selaimet täyttävät nämä ehdot.

Palvelimessa käytetään Open Source - ratkaisuja (OpenBSD, Linux, MySQL, Apache, PHP).

CVS-jakelussa tagilla rel-* varustetut versiot ovat tuotantokelpoisia.

Tietokannan ja ohjelmaversion yhteensopivuus varmistetaan ja mikäli versiot eivät ole keskenään yhteensopivia, tulee tästä joko selkeä tai kryptinen virheilmoitus.

Jakelupaketissa tulevaa alusta - skriptiä käytetään kannan alustamiseen. Se osaa alustaa sekä tuotanto- että harjoitusympäristöt perusasetuksiin tai mallitiedoilla.

alusta - ottaa mysql - pääkäyttäjän ja kantojen salasanat /etc/viha - hakemistoon talletetuista tiedostoista. Oletussalasanat onkin syytä muuttaa (jos kannan salasana vaihdetaan, pitää perustaa myös config.php ja tallettaa po salasana sinne).

Turvallisuudesta

Järjestelmää ei ole rakennettu vihamielistä ympäristöä silmällä pitäen, eli kaikkien käyttäjien tulee olla luotettavia.

Erityisesti operaatiokohtaisia lisämateriaaleja ei ole pakotettu vain tietyn operaation käyttöön.

Järjestelmä pystyy huolehtimaan omin päin käyttäjätunnusten hallinnasta. On huomioitava että käyttäjänhallintakoodi on ajettava joka PHP-tiedoston alussa, esimerkiksi common.php:sta. Ainoa poikkeus tästä on logoff.php.

Salasanat talletetaan kantaan crypt()attuina. Salasana eikä salasanatiiviste ei voi olla tyhjä.

Konfigurointitiedosto

Konfigurointitiedosto on nimeltään config.php. Normaali asennus ei koskaan ylikirjoita tätä. Pohja on tiedostossa config-sample.php. Tiedosto on php-koodia, ja siellä voi asettaa seuraavat muuttujat:

MuuttujaOletusarvoVaikutus
config_mysql_server 127.0.0.1:3306 tietokantapalvelimen nimi tai IP-numero ja portti
config_mysql_user viha käyttäjätunnus tietokantapalvelimeen, tarpeellinen jos samassa palvelimessa useita erillisiä ViHa-instansseja
config_mysql_pass salasana tietokantapalvelimeen
config_db tilanne3 käytettävä tietokanta, tarpeellinen jos samassa palvelimessa useita erillisiä ViHa-instansseja
config_realm ViHa mitä näytetään kirjautumisikkunassa
config_main_title Pääsivu pääsivun otsikko
config_main_h1 Viestin hallintajärjestelmä ViHa pääsivun ensimmäinen otsikko
config_main_motd näytetään tekstikappaleena pääsivulla ensimmäisen otsikon jälkeen
config_debug 0 talletetaanko ylimääräistä informaatiota vianselvitystä varten (1 = vähän, 2 = enemmän, ...)
config_prefix viha_ evästeiden etuliite, tarpeellinen jos samassa palvelimessa useita erillisiä ViHa-instansseja

Käyttöoikeuksista

Käyttäjän käyttöoikeus operaatioon, kalustoon, henkilöstöön jne selvitetään seuraavassa järjestyksessä. Kun yhteen kohtaan tulee osuma, ei seuraavia enää tutkita:

  1. Jos käyttäjällä on pääkäyttäjän oikeudet (kayttaja.root), hänellä on pääsy.
  2. Jos käyttäjä on aluevastaava (paivystys.alue_id, kayttaja_alue), hänellä on pääsy.
  3. Jos käyttäjällä on oikeus operaatioon (kayttaja_paivystys), hänellä on pääsy.
  4. Muutoin käyttäjällä ei ole pääsyä.

Tämän tarkastuksen ja eräitä muita yleisiä tarkastuksia toteuttavat funktiot permission_ids(alue_id,paivystys_id) ja permission_tab(taulu,id), joiden paluuarvot ovat linjassa muiden tarkastusfunktioiden kanssa.

Käyttöoikeuksia voidaan määritellä kolmella tasolla:

  1. Käyttäjä voidaan määritellä pääkäyttäjäksi jolloin hänellä on pääsy kaikkialle ja oikeus jakaa kaikkia oikeuksia edelleen sekä oikeus perustaa ja muokata käyttäjätunnuksia.
  2. Ellei käyttäjä ole pääkäyttäjä, hän voi olla yhden tai useamman alueen aluevastaava, jolloin hänellä on automaattisesti pääsy kaikkiin alueensa operaatioihin.
  3. Lisäksi käyttäjällä voi olla pääsy operaatioon. Tätä oikeutta ei voi luovuttaa edelleen.

Tietokantarivien oikeuksia tarkastellaan normaalikäyttäjälle seuraavasti:

  1. Jos alue_id == 2 (kaikki), rivi näkyy.
  2. Jos alue_id == oma ja paivystys_id == 2, rivi näkyy.
  3. Jos alue_id == oma ja paivystys_id == oma, rivi näkyy.
  4. Muuten rivi ei näy.

Sellaisissa näytöissä, joissa käsitellään vain yhteen operaatioon kuuluvia tietoja, näytetään vain kyseiseen operaatioon kuuluvat tiedot.

Alueiden olisi hyvä olla selvyyden vuoksi sellaisia, että ne eivät mene päällekkäin. Pakkoa tähän ei ole, mutta päällekkäin osuvat alueet vaikeuttavat käyttöoikeuksien hahmottamista.

Omien tila- ja sijaintikoodien valinnasta

Mikäli omia tila- ja/tai sijaintikoodeja luodaan, kannattaa muistaa seuraavat nyrkkisäännöt:

Monen operaation tuki

ViHa tukee useita operaatioita yhtä aikaa. Käyttäjän oikeuksista riippuu, mitä operaatioita hän näkee. Mikäli käyttäjällä on oikeus useampaan operaatioon, hän voi siirrellä lähes kaikkea tietoa näiden operaatioiden välillä. Oikeus käsitellä useampaa operaatiota tuo käyttäjälle laajemman päävalikon.

Operaatioista yksi on kulloinkin valittuna ja perustoiminnot kohdistuvat siihen.

Operaatiokohtaista materiaalia voidaan tallettaa sovelluksen juurihakemiston alla olevaan hakemistoon operaatio/id, missä id on operaation numerokoodi (paivystys.id). Jos tällainen hakemisto on olemassa, siellä olevat tiedostot näytetään päävalikossa. Näihin tiedostoihin ei ole tehty operaatiokohtaisia pääsyrajoituksia, eli sinne ei saa tallettaa tietoa jonka tulee pysyä vain yhden operaation tiedossa.

Ohjelman sisäisestä rakenteesta

Tietojen peruskäsittely

Tietojen peruskäsittelyä voidaan tehdä kahdella tasolla: taulu.php olettaa operaatioksi valitun ja alueeksi valitun operaation alueen. taulu0.php antaa mahdollisuuden käsitellä myös operaatiota ja aluetta. Tarkastusfunktiot huolehtivat siitä, että operaatio ja alue pysyvät keskenään synkronoituina.

Valintalistat

Valintalistat järjestetään normaalisti valittavan kohteen mukaan aakkosjärjestykseen. Jos listalla näytetään muutakin tietoa (alue, operaatio), järjestetään lista ensisijassa alueen, toissijaisesti operaation ja kolmanneksi valittavan kohteen mukaan.

Henkilön asemakoodit lajitellaan kuitenkin aina prioriteetin (=arvoasema) mukaan.

Tietokannan rakenteen muuttaminen

Mikäli tietokannan rakennetta muutetaan, tulee tarkastaa myös tiedostot tarkasta-kanta.php, ohje-guru.html (taulukko synkronoinnista) ja sync.php .

Päivityksistä

Päivitettäessä ViHaa versioon, joka aiheuttaa tietokannan muutoksen, tulee samalla ajaa kerran päivitysskripti, joka tekee kantaan vastaavat muutokset. Päivitysskriptit on nimetty kanta-v.vv.mysql. Vaihtoehtoisesti kannan voi alustaa kokonaan uudelleen mutta tällöin syötetyt tiedot häviävät.

Kantamuutosskriptejä ei voi jättää väliin vaan kaikki tarvittavat on ajettava järjestyksessä.

5.00

Päivitettäessä ViHaa aiemmista versioista 5.00:aan ja sen jälkeisiin versioihin on huomattava, että käyttäjätunnusten hallinta muuttuu kokonaan sovelluksen vastuulle. Www-palvelimesta on avattava pääsy ViHa-hakemistoon.

Päivitysskripti asettaa kaikille saman salasanan, joka käy ilmi itse skriptistä. Salasanat on syytä muuttaa mitä pikimmin.

Myös käyttöoikeuksien hallinta muuttuu. Oikeudet on syytä tarkastaa päivityksen jälkeen.

Päivitysskripti perustaa uuden alueen, "Määrittelemätön alue", johon sijoitellaan kaikki objektit jotka vaativat tietyn alueen. Tämä alue on tarkoitettu käytettäväksi siirtymäkaudella.

Tapahtumakirjaukset tulee käsin tai SQL:llä sijoittaa oikeisiin operaatioihin (ryhmän mukaan), mikäli ne kuuluvat operaatioihin, joiden ID-numero (4.14 version kannassa) on > 9. Pienemmillä ID-numeroilla varustetut operaatiot käsittelee päivitysskripti.

5.16 (5.16alpha-5.18alpha)

Tietokannan oletussalasanojen ja tietokannan käyttäjätunnusten käsittelyä on muutettu niin, että erilaiset salasanat talletetaan nyt /etc/viha - hakemistossa olevista tiedostoista. Harjoitus- ja pääkannalle asetetaan eri käyttäjätunnukset (ja pitäisi asettaa eri salasanat). Oletuskäyttäjätunnus kantaan on nyt "viha" ja read only - tunnus on poistettu.

Tässä yhteydessä kannasta on syytä poistaa (nyt tarpeettomat) tunnukset ts ja tu, vaikkapa komennolla "DROP USER ts@localhost, tu@localhost".

Käännöksestä

Tähän taulukkoon on koottu ViHan keskeisimpiä termejä eri kielillä.

SuomeksiIn English
AlueArea
AluevastaavaArea manager
PääkäyttäjäAdministrator
HenkilöPerson
HälytysryhmäTeam
JärjestöOrganisation
OperaatioOperation
SijaintiLocation
RyhmäSquad
TilaStatus
KalustoEquipment
ViestivälineetRadio equipment
TavaratOther equipment

Monikulttuuristamisessa käytetään työkaluna gettext - kirjastoa.

Synkronoinnista

Synkronointi on tarkoitettu avuksi tilanteisiin, joissa joudutaan operoimaan itsenäisen ViHa-instanssin (etä-viha) turvin tilanteessa, jossa verkkoyhteyttä ei ole tai verkossa oleva ViHa (pää-viha) ei ole käytettävissä.

Etä-viha tulee käyttöä odotellessa pitää replikoituna pää-vihasta ja synkronointi on tehtävä mahdollisimman nopeasti. Tämän jälkeen etä-viha pitää taas replikoida.

Etä-vihan palvelimen kellon tulisi olla ajassa mahdollisimman tarkasti.

Synkronointi tapahtuu aina kahden ViHa-instanssin kesken. Kantojen versionumeroiden on oltava samat.

Synkronointi ei koskaan poista tietoja.

Kovakoodattuja ID-numeroita ei muuteta.

Instanssien kesken täysin identtiset tiedot jätetään ennalleen.

Jos tiedot ovat oleellisilta osiltaan samat, jätetään kantaan myöhempi tieto.

Jos tiedot ovat erilaiset, tehdään uusi tietue.

Käyttöoikeustietoja ei synkronoida. Taulu suoja tyhjennetään synkronoinnin yhteydessä molemmista päistä.

Synkronointijärjestys

Taulut käsitellään seuraavassa järjestyksessä:

Taulu Sarakkeet, joiden perusteella määritetään yksilöllisyys Kovakoodatut ID-numerot Päivitettävät taulut Erityistoimenpiteet
versio (kaikki) Jos eroa, anna virheilmoitus äläkä synkronoi.
juuei (kaikki) Jos eroa, anna virheilmoitus äläkä synkronoi.
hlo_ajat_tyyppi (kaikki) Jos eroa, anna virheilmoitus äläkä synkronoi.
suoja Tyhjennetään molemmista (sic!)
alue alue 1-3 hlo, hlo_ajat.variable_id, hlo_tila, jarjesto, kadonnut, kayttajat_alue, laite, loki, loytynyt, osaaminen, paikka, paivystys, ryhma, ryhma_tila, tap, tavara hlo_ajat.variable_id erikoiskäsittely
hlo nimi hlo_ajat, kayttajat, laite, osaaminen_hlo, tavara Jos synkronointien välillä eri instansseihin perustetaan samannimiset henkilöt, toinen katoaa. Tämä huomataan tosin seuraavan kerran kadonnutta henkilöä perustettaessa, kun perustaminen ei onnistu.
hlo_ajat hlo_id, hlo_ajat_tyyppi_id, variable_id, ts
hlo_asema hlo_asema 1-9 hlo, hlo_ajat.variable_id hlo_ajat.variable_id erikoiskäsittely
hlo_tila alue_id, paivystys_id, hlo_tila 1-5 hlo
jarjesto jarjesto, alue_id 1-2 hlo, laite, tavara
kadonnut nimi, kello
kayttajat 1-2 Ei synkronoida!
laite jarjesto_id,laite,tunniste
laite_tyyppi laite_tyyppi 1 laite
lapsi_tila lapsi_tila 1-4 kadonnut, loytynyt
loki alue_id, paivystys_id, data, ip, user, ts Data sisältää lainausmerkkejä, jotka hoidettava!
loytynyt nimi,kello
osaaminen alue_id, paivystys_id, osaaminen 1-18 osaaminen_hlo
paikka alue_id, paivystys_id, paikka 1-4 ryhma
paivystys alue_id, nimi, alkoi 1-2 hlo, hlo_ajat.variable_id, hlo_tila, jarjesto, kadonnut, kayttajat_paivystys, laite, loki, loytynyt, osaaminen, paikka, paivystys_tuki, ryhma, ryhma_tila, taktinen_loki, tap, tavara hlo_ajat.variable_id erikoiskäsittely
ryhma alue_id,paivystys_id,kutsu 1 hlo, hlo_ajat.variable_id, laite, paivystys.johto_ryhma_id, paivystys.viesti_ryhma_id, paivystys_tuki, tap, tavara, hlo_ajat.variable_id erikoiskäsittely
ryhma_tila alue_id,paivystys_id,ryhma_tila 1-13 ryhma
taktinen_loki paivystys_id,data,ip,user,ts
tap alue_id,paivystys_id,ryhma_id,tap,ts
tavara jarjesto_id,hlo_id,tavara,tunniste
tavara_tyyppi tavara 1-9
verkko verkko 1-8 laite,paivystys.oletus_verkko_id,ryhma
kayttajat_alue kayttajat_id, alue_id Päivittynyt kuntoon aiemmilla kierroksilla. (Jos duplikaatteja, poista vanhimmat)
kayttajat_paivystys kayttajat_id, paivystys_id Päivittynyt kuntoon aiemmilla kierroksilla. (Jos duplikaatteja, poista vanhimmat)
paivystys_tuki paivystys_id, ryhma_id Päivittynyt kuntoon aiemmilla kierroksilla. (Jos duplikaatteja, poista vanhimmat)
osaaminen_hlo hlo_id, osaaminen_id Päivittynyt kuntoon aiemmilla kierroksilla. (Jos duplikaatteja, poista vanhimmat)