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) |