Statistics
| Branch: | Tag: | Revision:

root / db / models.py @ be7b8d37

History | View | Annotate | Download (3 kB)

1
# vim: ts=4 sts=4 et ai sw=4 fileencoding=utf-8
2

    
3
from django.db import models
4
from django.contrib.auth.models import User
5
import vocabs
6

    
7
class Limit(models.Model):
8
    description = models.CharField(max_length=45)
9
    
10
    class Meta:
11
        verbose_name = u'Available limits for users'
12
    
13
    def __unicode__(self):
14
        return self.description
15

    
16

    
17
class OceanUser(models.Model):
18
    name = models.CharField(max_length=255)
19
    credit = models.IntegerField()
20
    quota = models.IntegerField()
21
    created = models.DateField()
22
    monthly_rate = models.IntegerField()
23
    user = models.ForeignKey(User, unique=True)
24
    limits = models.ManyToManyField(Limit, through='UserLimit')
25
    
26
    class Meta:
27
        verbose_name = u'Ocean User'
28
    
29
    def __unicode__(self):
30
        return self.name
31

    
32

    
33
class UserLimit(models.Model):
34
    user = models.ForeignKey(OceanUser)
35
    limit = models.ForeignKey(Limit)
36
    value = models.IntegerField()
37
    
38
    class Meta:
39
        unique_together = ('user', 'limit')
40
        verbose_name = u'Enforced limits for each user'
41
    
42
    def __unicode__(self):
43
        return u'Limit %s for user %s: %d' % (self.limit, self.user, self.value)
44

    
45

    
46
class Flavor(models.Model):
47
    cpu = models.IntegerField(default=0)
48
    ram = models.IntegerField(default=0)
49
    disk = models.IntegerField(default=0)
50
    cost_active = models.PositiveIntegerField()
51
    cost_inactive = models.PositiveIntegerField()
52
    
53
    class Meta:
54
        verbose_name = u'Virtual Machine flavors'
55
    
56
    def _get_name(self):
57
        return u'c%dr%dd%d' % ( self.cpu, self.ram, self.disk )
58

    
59
    name = property(_get_name)
60

    
61
    def __unicode__(self):
62
        return self.name
63

    
64

    
65
class VirtualMachine(models.Model):
66
    name = models.CharField(max_length=255)
67
    created = models.DateTimeField()
68
    state = models.CharField(choices=vocabs.STATES, max_length=30)
69
    charged = models.DateTimeField()
70
    imageid = models.IntegerField()
71
    hostid = models.CharField(max_length=100)
72
    server_label = models.CharField(max_length=100)
73
    image_version = models.CharField(max_length=100)
74
    ipfour = models.IPAddressField()
75
    ipsix = models.CharField(max_length=100)
76
    owner = models.ForeignKey(OceanUser)
77
    flavor = models.ForeignKey(Flavor)
78
    
79
    class Meta:
80
        verbose_name = u'Virtual machine instances'
81
        get_latest_by = 'created'
82
    
83
    def __unicode__(self):
84
        return self.name
85

    
86

    
87
class VirtualMachineMetadata(models.Model):
88
    meta_key = models.CharField(max_length=50)
89
    meta_value = models.CharField(max_length=500)
90
    vm = models.ForeignKey(VirtualMachine)
91
    
92
    class Meta:
93
        verbose_name = u'Metadata for virtual machine instances'
94
    
95
    def __unicode__(self):
96
        return u'%s, %s for %s' % ( self.key, self.value, self.vm.name )
97

    
98

    
99
class AccountingLog(models.Model):
100
    vm = models.ForeignKey(VirtualMachine)
101
    date = models.DateTimeField()
102
    state = models.CharField(choices=vocabs.STATES, max_length=30)
103
    
104
    class Meta:
105
        verbose_name = u'Charging log'
106

    
107
        def __unicode__(self):
108
                return u'%s %s %s' % ( self.vm.name, self.date, self.state )