Пример #1
0
class Switches(ma.Document):

    id = ma.StringField(required=True)
    # model
    model_ref = ma.RefField('SwitchModels')
    model = model_ref.rel()
    name = ma.StringField(required=False, allow_none=True)
    # group
    group_ref = ma.RefField('Groups', allow_none=True, ignore_missing=True)
    group = group_ref.rel(allow_none=True)
    # location
    location_ref = ma.RefField(required=False,
                               validator=_validate_location,
                               allow_none=True,
                               ignore_missing=True)
    location = location_ref.rel(allow_none=True)

    # properties
    @property
    def link(self):
        return '/switches/{}'.format(self.id)

    @property
    def management_link(self):
        if self.management:
            if self.management.link:
                return str(self.management.link)
            elif self.management.link:
                return self.management.link

    # indexes
    id_index = Index().ascending('id').unique()
Пример #2
0
class Racks(ma.Document):

    model_ref = ma.RefField('RackModels', required=True)
    model = model_ref.rel()
    serial_number = ma.StringField(required=False, allow_none=True)
    location_ref = ma.RefField('Rooms')
    location = location_ref.rel()
    number = ma.IntField(min_value=0)
    name = ma.StringField(required=False)
    notes = ma.StringField(required=False)
    units = ma.ListField(ma.DocumentField('RackUnits'), default_empty=True)

    # link to info page
    @property
    def link(self):
        return "/racks/{}".format(self.mongo_id)

    @property
    def render(self):
        return '<a href="{}">{}</a>'.format(self.link, self.name)

    # magic methods
    def __str__(self):
        return 'Rack {}'.format(self.number)

    def __repr__(self):
        return "<Rack '{}'>".format(self.number)
Пример #3
0
class Projects(ma.Document):

    # parameters
    owner_ref = ma.RefField('Users')
    owner = owner_ref.rel()
    group_ref = ma.RefField('Groups')
    group = group_ref.rel()
    name = ma.StringField()
    description = ma.StringField(allow_none=True,
                                 ignore_missing=True,
                                 required=False)
    created_on = ma.CreatedField(tz_aware=True)
    modified_on = ma.ModifiedField(tz_aware=True)
    start_date = DateField(ignore_missing=True,
                           allow_none=True,
                           required=False)
    target_end_date = DateField(ignore_missing=True,
                                allow_none=True,
                                required=False)
    status_ref = ma.RefField('ProjectStatusTypes',
                             allow_none=True,
                             ignore_missing=True)
    status = status_ref.rel(allow_none=True)
    updates = ma.ListField(ma.DocumentField('ProjectUpdates'),
                           required=False,
                           allow_none=True,
                           default_empty=True)
    member_refs = ma.ListField(ma.RefField('Users'),
                               required=False,
                               default_empty=True,
                               ignore_missing=True)
    members = member_refs.rel(ignore_missing=True)
    archived = ma.BoolField(required=False, default=False)

    # link to info page
    @property
    def link(self):
        return "/projects/{}".format(self.mongo_id)

    @property
    def render(self):
        return '<a href="{}">{}</a>'.format(self.link, self.name)

    # relationships
    @property
    def servers(self):
        return Servers.query.filter(Servers.project_ref == self.to_ref()).all()

    # indexes
    project_name_index = Index().ascending('name').unique()

    # magic methods
    def __repr__(self):
        return "<Project {}>".format(self.name)

    def __str__(self):
        return str(self.name)
Пример #4
0
class RackDimensionDocuments(ma.Document):

    units_ref = ma.RefField('LengthUnits')
    units = units_ref.rel()
    display_units_ref = ma.RefField('LengthUnits')
    display_units = display_units_ref.rel()
    width = ma.FloatField()
    height = ma.FloatField()
    depth = ma.FloatField()

    # magic methods
    def __str__(self):
        return '{1}{0} x {2}{0} x {3}{0}' \
            .format(self.display_units.abbreviation,
                    self.width, self.height, self.depth)
Пример #5
0
class Rooms(ma.Document):

    # parameters
    name = ma.StringField()
    type_ref = ma.RefField('RoomTypes')
    type = type_ref.rel()
    description = ma.StringField()

    # link to info page
    @property
    def link(self):
        return "/rooms/{}".format(self.mongo_id)

    @property
    def render(self):
        return '<a href="{}">{}</a>'.format(self.link, self.name)

    # magic methods
    def __str__(self):
        return str(self.name)

    def __repr__(self):
        return "<Room '{}'>".format(self.name)

    # indexes
    name_index = Index().ascending('name').unique()
Пример #6
0
class Groups(ma.Document):

    name = ma.StringField(required=True)
    description = ma.StringField()
    member_refs = ma.ListField(ma.RefField('Users'),
                               required=False,
                               allow_none=True,
                               ignore_missing=True,
                               default_empty=True)
    members = member_refs.rel(ignore_missing=True)

    # link to info page
    @property
    def link(self):
        return "/groups/{}".format(self.mongo_id)

    @property
    def render(self):
        return '<a href="{}">{}</a>'.format(self.link, self.name)

    # relationships
    @property
    def servers(self):
        group_ref = DBRef('Groups', ObjectId(self.mongo_id))
        return Servers.query.filter(Servers.group_ref == group_ref).all()

    # magic methods
    def __repr__(self):
        return "<Groups {}>".format(self.name)

    def __str__(self):
        return str(self.name)

    # indexes
    name_index = Index().ascending('name').unique()
Пример #7
0
class MemoryModels(ma.Document):

    make = ma.RefField('Manufacturers')
    model = ma.StringField()
    type = ma.StringField()
    part_number = ma.StringField()
    capacity = ma.DocumentField('Bytes')
    speed = ma.DocumentField('Frequency')
Пример #8
0
class Memory(ma.Document):

    # parameters
    model_ref = ma.RefField('MemoryModels')
    serial_number = ma.StringField(allow_none=True)

    # indexes
    sn_index = Index().ascending('serial_number').unique()
Пример #9
0
class ProjectUpdates(ma.Document):

    # parameters
    id_ = ma.ObjectIdField(auto=True)
    datetime = ma.DateTimeField(use_tz=False)
    user_ref = ma.RefField('Users')
    user = user_ref.rel()
    message = ma.StringField()
Пример #10
0
class Drives(ma.Document):

    serial_number = ma.StringField(required=False, ignore_missing=True)
    model_ref = ma.RefField('DriveModels')
    model = model_ref.rel()
    group_ref = ma.RefField('Groups',
                            required=False,
                            allow_none=True,
                            ignore_missing=True)
    group = group_ref.rel()

    # properties
    @property
    def server(self):
        return Servers.query.filter()

    # indexes
    serial_number_index = SparseIndex().ascending('serial_number').unique()
Пример #11
0
class Cpus(ma.Document):

    # parameters
    socket_number = ma.IntField()
    model_ref = ma.RefField('CpuModels')
    model = model_ref.rel()

    def __str__(self):
        return '{}'.format(self.model)
Пример #12
0
class DriveModels(ma.Document):

    # parameters
    make_ref = ma.RefField(Manufacturers)
    make = make_ref.rel()
    type_ref = ma.RefField('DriveTypes')
    type = type_ref.rel()
    model = ma.StringField()

    # indexes
    model_index = Index().ascending('model').unique()

    # magic methods
    def __repr__(self):
        return "<DriveModel {} {}>".format(self.make, self.model)

    def __str__(self):
        return "{} {}".format(self.make, self.model)
Пример #13
0
class Frequency(ma.Document):

    # parameters
    value = ma.IntField()
    units_ref = ma.RefField('FrequencyUnits')
    units = units_ref.rel()

    # magic methods
    def __str__(self):
        return '{} {}'.format(self.value, self.units)
Пример #14
0
class ServerMemory(ma.Document):

    # parameters
    module_ref = ma.RefField('Memory')
    module = module_ref.rel()
    bank = ma.StringField()
    slot = ma.StringField()
    current_speed = ma.IntField()

    # indexes
    module_index = Index().ascending('module_ref').unique()
Пример #15
0
class SwitchModels(ma.Document):

    make_ref = ma.RefField('Manufacturers')
    make = make_ref.rel()
    name = ma.StringField()

    # indexes
    model_index = Index().ascending('make').ascending('name').unique()

    # magic_methods
    def __str__(self):
        return "{}".format(self.name)
Пример #16
0
class ServerModels(ma.Document):

    make_ref = ma.RefField('Manufacturers')
    make = make_ref.rel()
    name = ma.StringField()
    height = ma.IntField(min_value=1)
    drive_slots = ma.IntField(required=False, allow_none=True)
    modular = ma.BoolField(default=False)

    def __str__(self):
        return "{}".format(self.name)

    # indexes
    make_model_index = Index().ascending('make_ref') \
        .ascending('name').unique()
Пример #17
0
class CpuModels(ma.Document):

    # parameters
    make_ref = ma.RefField('Manufacturers')
    make = make_ref.rel()
    name = ma.StringField()
    speed = ma.DocumentField('Frequency')
    cores = ma.IntField()
    cache = ma.ListField(ma.DocumentField('CpuCaches'),
                         required=False,
                         default_empty=True)

    # magic methods
    def __str__(self):
        return '{}'.format(self.name)
Пример #18
0
class FrequencyUnits(ma.Document):

    # parameters
    system_ref = ma.RefField('UnitsSystems',
                             required=False,
                             allow_none=True,
                             ignore_missing=True)
    system = system_ref.rel(allow_none=True)
    name = ma.StringField()
    abbreviation = ma.StringField(required=False,
                                  allow_none=True,
                                  ignore_missing=True)

    # indexes
    unit_index = Index().ascending('name').unique()

    # magic methods
    def __str__(self):
        return '{}'.format(self.abbreviation or self.name)
Пример #19
0
class Jobs(ma.Document):

    _mapping = {
        0: 'Unknown',
        1: 'Started',
        2: 'Pending',
        3: 'Completed',
        4: 'Failed'
    }

    # parameters
    user_ref = ma.RefField('Users')
    user = user_ref.rel()
    description = ma.StringField()
    start_time = ma.DateTimeField(use_tz=False)
    end_time = ma.DateTimeField(use_tz=False, allow_none=True)
    status_number = ma.IntField()
    details = ma.ListField(ma.DocumentField('JobDetails'), default_empty=True)

    # properties
    def _get_status(self):
        return self._mapping[self.status_number]

    def _set_status(self, value):
        for k, v in self._mapping.items():
            if v.lower() == value.lower():
                self.status_number = int(k)
                break
        else:
            self.status_number = 0

    status = property(_get_status, _set_status)

    # magic methods
    def __repr__(self):
        return '<Jobs id {}>'.format(self.mongo_id)

    def __str__(self):
        return "JID {}".format(self.mongo_id)
Пример #20
0
class NetworkInterfaces(ma.Document):
    def _validate_type(type_):
        if type_ not in ('oob', 'ib'):
            raise BadValueException('Wrong interface type.')

    def _validate_mac(value):
        if value != value.replace(':', '').lower():
            raise BadValueException('MAC Address must be in all lower case,'
                                    'and with no special characters')

    # parameters
    serial_number = ma.StringField(required=False, allow_none=True)
    model_ref = ma.RefField('NetworkInterfaceModels',
                            required=False,
                            allow_none=True,
                            ignore_missing=True)
    model = model_ref.rel(allow_none=True)
    mac = ma.StringField(validator=_validate_mac)
    ip = ma.StringField(required=False, allow_none=True, ignore_missing=True)
    name = ma.StringField()
    slot_type = ma.StringField(required=False,
                               allow_none=True,
                               ignore_missing=True)
    slot = ma.IntField()
    port = ma.IntField(required=False, allow_none=True, ignore_missing=True)
    type = ma.StringField(validator=_validate_type)

    @property
    def formatted_mac(self):
        return ":".join(s.encode('hex')
                        for s in self.mac.decode('hex')).upper()

    # indexes
    serial_number_index = SparseIndex().ascending('serial_number').unique()
    mac_index = Index().ascending('mac').unique()

    # magic methods
    def __str__(self):
        return "<NetworkInterfaces {}>".format(self.formatted_mac)
Пример #21
0
class RackModels(ma.Document):

    make_ref = ma.RefField('Manufacturers', required=True)
    make = make_ref.rel()
    name = ma.StringField()
    dimensions = ma.DocumentField('RackDimensionDocuments')
    number_of_units = ma.IntField(min_value=1)

    # link to info page
    @property
    def link(self):
        return "/admin/racks/models/{}".format(self.mongo_id)

    @property
    def render(self):
        return '<a href="{}">{}</a>'.format(self.link, self.name)

    # magic methods
    def __repr__(self):
        return "<RackModels {} {}>".format(self.make, self.name)

    def __str__(self):
        return "{}".format(self.name)
Пример #22
0
class LengthUnits(ma.Document):
    def _validate_unit(value):
        if value.endswith('meter'):
            if self.unit.rstrip('meter') in \
                    (metric_scale['scale'].keys() + ['']):
                return True
        elif value.lower() in imperial_scale.keys():
            return True
        return False

    # unit should not end with 's'
    system_ref = ma.RefField('UnitsSystems')
    system = system_ref.rel()
    unit = ma.StringField(validator=_validate_unit)
    abbreviation = ma.StringField()

    # meters are the base unit to work off of
    def convert_to_meters(self, value):
        if 'inch' in self.unit.lower():
            return value * 0.0254
        elif self.unit.lower().endswith('meter'):
            current_scale = self.unit.lower().rstrip('meter')
            return value * current_scale
Пример #23
0
class NetworkInterfaceModels(ma.Document):

    make = ma.RefField('Manufacturers')
    name = ma.StringField()
    port_count = ma.IntField(required=False, ignore_missing=True)
    speed = ma.IntField()  # change to BitRate
Пример #24
0
class Servers(ma.Document):

    # parameters
    id = ma.StringField()
    model_ref = ma.RefField('ServerModels')
    model = model_ref.rel()
    host_name = ma.StringField(required=False, ignore_missing=True)
    name = ma.StringField(required=False, ignore_missing=True, allow_none=True)
    bios_version = ma.StringField(required=False, allow_none=True)
    bios_date = DateField(required=False, allow_none=True, ignore_missing=True)

    # cpu info
    cpus = ma.ListField(ma.DocumentField('Cpus'),
                        required=False,
                        ignore_missing=True,
                        default_empty=True)

    # memory info
    memory_refs = ma.SetField(ma.RefField('ServerMemory'), default_empty=True)
    memory = memory_refs.rel(ignore_missing=True)

    @property
    def memory_capacity(self):
        return sum([m.capacity for m in self.memory])

    # management info
    management = ma.DocumentField('ManagementCredentials',
                                  required=False,
                                  ignore_missing=True,
                                  allow_none=True)

    # group
    group_ref = ma.RefField('Groups', allow_none=True, ignore_missing=True)
    group = group_ref.rel(allow_none=True)

    # project
    project_ref = ma.RefField('Projects',
                              required=False,
                              allow_none=True,
                              ignore_missing=True,
                              default=None)
    project = project_ref.rel(allow_none=True)

    # drives
    drive_refs = ma.ListField(ma.RefField('Drives'),
                              required=False,
                              default_empty=True)
    drives = drive_refs.rel(ignore_missing=True)

    # virtual drives
    virtual_drives = ma.ListField(ma.DocumentField('VirtualDrives'),
                                  required=False,
                                  default_empty=True,
                                  ignore_missing=True)

    # interfaces
    interface_refs = ma.SetField(ma.RefField(),
                                 required=False,
                                 default_empty=True,
                                 ignore_missing=True)
    interfaces = interface_refs.rel(ignore_missing=True)

    # location
    location_ref = ma.RefField(required=False,
                               validator=_validate_location,
                               allow_none=True,
                               ignore_missing=True)
    location = location_ref.rel(allow_none=True)

    # properties
    @property
    def cpu_count(self):
        return len(self.cpus)

    @property
    def cpu_model(self):
        if len(self.cpus) > 0:
            return self.cpus[0]
        return None

    @property
    def link(self):
        return '/servers/{}'.format(self.id)

    @property
    def render(self):
        return '<a href="{}">{}</a>'.format(self.link, self.id)

    @property
    def management_link(self):
        if self.management:
            if self.management.link:
                return str(self.management.link)
            elif self.management.link:
                return self.management.link

    # indexes
    id_index = Index().ascending('id').unique()
    name_index = Index().ascending('name').unique()

    # magic methods
    def __str__(self):
        return "{} {}".format(self.model, self.id)