Statistics
| Branch: | Tag: | Revision:

root / logic / utils.py @ 22e52ede

History | View | Annotate | Download (1.4 kB)

1 92c53da1 Vassilios Karakoidas
#
2 92c53da1 Vassilios Karakoidas
# Various utility functions
3 92c53da1 Vassilios Karakoidas
#
4 92c53da1 Vassilios Karakoidas
# Copyright 2010 Greek Research and Technology Network
5 92c53da1 Vassilios Karakoidas
#
6 e3a99a08 Vassilios Karakoidas
from django.conf import settings
7 92c53da1 Vassilios Karakoidas
8 e3a99a08 Vassilios Karakoidas
from db.models import VirtualMachine
9 e3a99a08 Vassilios Karakoidas
10 e3a99a08 Vassilios Karakoidas
def id_from_instance_name(name):
11 e3a99a08 Vassilios Karakoidas
    """Returns VirtualMachine's Django id, given a ganeti machine name.
12 e3a99a08 Vassilios Karakoidas

13 e3a99a08 Vassilios Karakoidas
    Strips the ganeti prefix atm. Needs a better name!
14 e3a99a08 Vassilios Karakoidas

15 e3a99a08 Vassilios Karakoidas
    """
16 e3a99a08 Vassilios Karakoidas
    if not str(name).startswith(settings.BACKEND_PREFIX_ID):
17 e3a99a08 Vassilios Karakoidas
        raise VirtualMachine.InvalidBackendIdError(str(name))
18 e3a99a08 Vassilios Karakoidas
    ns = str(name).lstrip(settings.BACKEND_PREFIX_ID)
19 e3a99a08 Vassilios Karakoidas
    if not ns.isdigit():
20 e3a99a08 Vassilios Karakoidas
        raise VirtualMachine.InvalidBackendIdError(str(name))
21 e3a99a08 Vassilios Karakoidas
22 e3a99a08 Vassilios Karakoidas
    return int(ns)
23 02feca11 Vassilios Karakoidas
24 02feca11 Vassilios Karakoidas
25 02feca11 Vassilios Karakoidas
def get_rsapi_state(vm):
26 02feca11 Vassilios Karakoidas
    """Returns the RSAPI state for a virtual machine"""
27 02feca11 Vassilios Karakoidas
    try:
28 02feca11 Vassilios Karakoidas
        r = VirtualMachine.RSAPI_STATE_FROM_OPER_STATE[vm._operstate]
29 02feca11 Vassilios Karakoidas
    except KeyError:
30 02feca11 Vassilios Karakoidas
        return "UNKNOWN"
31 02feca11 Vassilios Karakoidas
    # A machine is in REBOOT if an OP_INSTANCE_REBOOT request is in progress
32 02feca11 Vassilios Karakoidas
    if r == 'ACTIVE' and vm._backendopcode == 'OP_INSTANCE_REBOOT' and \
33 02feca11 Vassilios Karakoidas
        vm._backendjobstatus in ('queued', 'waiting', 'running'):
34 02feca11 Vassilios Karakoidas
        return "REBOOT"
35 02feca11 Vassilios Karakoidas
    return r
36 22e52ede Vassilios Karakoidas
37 22e52ede Vassilios Karakoidas
38 22e52ede Vassilios Karakoidas
def calculate_cost(start_date, end_date, cost):
39 22e52ede Vassilios Karakoidas
    """Calculate the total cost for the specified duration"""
40 22e52ede Vassilios Karakoidas
    td = end_date - start_date
41 22e52ede Vassilios Karakoidas
    sec = float(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / float(10**6)
42 22e52ede Vassilios Karakoidas
    total_hours = float(sec) / float(60.0*60.0)
43 22e52ede Vassilios Karakoidas
    total_cost = float(cost)*total_hours
44 22e52ede Vassilios Karakoidas
45 22e52ede Vassilios Karakoidas
    return round(total_cost)