Virtlab:Řídící server/Systém kvót

Z VirtlabWiki

Přejít na: navigace, hledání

Stejně, jako značná část systému Virtlab, bylo potřeba navrhnout systém kvót. Kvótou rozumíme množství času, které může uživatel použít v definovaném časovém období.

V předchozí verzi Virtlabu měl uživatel přidělen určitý počet timeslotů, které mohl vypotřebovat na úlohy během jednoho kalendářního týdne. V novém týdnu mu byla kvóta opět navýšena na určenou hodnotu.

Uživatelům, jsme chtěli umožnit si úlohu rezervovat na libovolnou dobu - i několik měsícu dopředu. Pokud bychom výše popsaný systém aplikovali teď, znamenalo by to identifikovat, do kterého kalendářního týdne (nebo jiného odbobí) konkrétní rezervace spadá, jestli nezasahuje i do týdne vedlejšího. Pokud si uvědomíme všechny detaily tohoto řešení, zjistíme že by implementace byla poměrně komplikovaná. Proto byl vymyšlen systém nový.

Systém klouzavého okna

nastavení systému a uživatele 
v systému je definován časový úsek (označme ho jako A), který systém prohledává. Dále je definováno množství času, které uživatel může použít na rezervace úloh (označme ho jako B). Aby celý systém mohl fungovat, je potřeba, aby A>B. V reálném provozu si můžeme pod těmito proměnými představit hodnoty, jako týden (chápan jako 7 dní, 168 hodin, ...) a 10 hodin.

Během rezervace úlohy na konkrétní čas, dochazí ke kontrole, zda-li uživatel může rezervaci provést, nebo už má množství času vyčerpáno.

Kontrola probíhá následovně 
  • čas začátku (Start) i konce (Stop) rezervace se převede na Unix timestamp, jelikož tato veličina je definována jako počet sekund od 1.1.1970 0:00, jedná se o vlastně o prostor přirozených čísel. Proto operace s časem (např.: doba mezi dvěma daty), lze provádět triviálními aritmetickými operacemi.
  • najdeme datum, které je uprostřed rezervace: (Stop - Start) / 2 + Start = Middle
  • budeme zkoumat dobu od Middle - A / 2 do Middle + A / 2, kolik času má uživatel v tomto intervalu rezervovano a jestli již nepřekročil množství času B.
výhody 
  • je zabráněno spoření času na nějaké vzdálené období, kde by uživatel mohl obsadit velký časový prostor
  • odpadají problémy s klasickým kalendářem (přestupné roky, různý počet dnů v měsíci, ...)
  • hodnoty A a B může mít definovám každý uživatel zvlášť. Tímto způsobem, můžeme některým uživatelům zvýšit množství času (pokud si to nějakým způsobem zaslouží), nebo naopak snížit.
Osobní nástroje