network_inventory/docs/docs.org

252 lines
6.6 KiB
Org Mode
Raw Normal View History

2017-12-22 07:40:13 +01:00
#+TITLE: Andreas Zweili
#+SETUPFILE: ~/git_repos/notes/settings/html_theme/setup/theme-readtheorg.setup
#+AUTHOR: Andreas Zweili
2017-12-22 14:13:51 +01:00
* Models
Models define the database layout in a django application. Each class
represents a table in the database. A lot the models in this project
are very small because they exist mainly to keep the information unified.
** Device
The "Device" model represents a generel device about which I don't have
that much information. It might represent an IOT device or something
similarly closed.
2017-12-22 17:02:24 +01:00
#+BEGIN_SRC python :tangle ../inventory/models.py
2017-12-22 14:13:51 +01:00
from django.db import models
2017-12-22 17:02:24 +01:00
class Device(models.Model):
name = models.CharField(max_length=50)
description = models.TextField()
def __str__(self):
return self.name
#+END_SRC
** Weekday, DayOfMonth and Month
2017-12-22 17:02:24 +01:00
These models contain all the days of the week the days in a month and
all month in a year.
2017-12-22 17:02:24 +01:00
#+BEGIN_SRC python :tangle ../inventory/models.py :padline 2
2017-12-22 17:02:24 +01:00
class Weekday(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Month(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
#+END_SRC
2017-12-22 17:02:24 +01:00
#+BEGIN_SRC python :tangle ../inventory/models.py :padline 2
2017-12-22 17:02:24 +01:00
class RamType(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Ram(models.Model):
type = models.ForeignKey(RamType, on_delete=models.CASCADE)
size_in_gb = models.FloatField()
def __str__(self):
return '{} {} GB'.format(self.type, self.size)
#+END_SRC
2017-12-22 17:02:24 +01:00
#+BEGIN_SRC python :tangle ../inventory/models.py :padline 2
2017-12-22 17:02:24 +01:00
class DiskType(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class DiskSize(models.Model):
size = models.FloatField()
def __str__(self):
return self.size + " GB"
class Disk(models.Model):
type = models.ForeignKey(DiskType, on_delete=models.CASCADE)
size_in_gb = models.ForeignKey(DiskSize, on_delete=models.CASCADE)
def __str__(self):
return '{} {} GB'.format(self.type, self.size)
#+END_SRC
2017-12-22 17:02:24 +01:00
class Architecture(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class CpuManufacturer(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Cpu(models.Model):
name = models.CharField(max_length=50)
manufacturer = models.ForeignKey(CpuManufacturer, on_delete=models.PROTECT)
number_of_cores = models.IntegerField()
frequency = models.FloatField()
architecture = models.ForeignKey(Architecture, on_delete=models.PROTECT)
def __str__(self):
return self.name
#+END_SRC
2017-12-22 17:02:24 +01:00
#+BEGIN_SRC python :tangle ../inventory/models.py :padline 2
2017-12-22 17:02:24 +01:00
class OperatingSystem(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
#+END_SRC
2017-12-22 17:02:24 +01:00
#+BEGIN_SRC python :tangle ../inventory/models.py :padline 2
2017-12-22 17:02:24 +01:00
class Raid(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
#+END_SRC
2017-12-22 17:02:24 +01:00
#+BEGIN_SRC python :tangle ../inventory/models.py :padline 2
2017-12-22 17:02:24 +01:00
class Computer(Device):
hostname = models.CharField(max_length=20, unique=True)
raid = models.ForeignKey(Raid, null=True, blank=True,
on_delete=models.PROTECT)
os = models.ForeignKey(OperatingSystem, on_delete=models.PROTECT)
cpu = models.ForeignKey(Cpu, on_delete=models.PROTECT)
ram = models.ManyToManyField(Ram, through='ComputerRamRelation')
ip = models.CharField(max_length=15)
disks = models.ManyToManyField(Disk, through='ComputerDiskRelation')
host = models.ForeignKey('self', null=True, blank=True,
on_delete=models.PROTECT)
def __str__(self):
return self.hostname
#+END_SRC
2017-12-22 17:02:24 +01:00
#+BEGIN_SRC python :tangle ../inventory/models.py :padline 2
2017-12-22 17:02:24 +01:00
class ComputerDiskRelation(models.Model):
disk = models.ForeignKey(Disk, on_delete=models.CASCADE)
computer = models.ForeignKey(Computer, on_delete=models.CASCADE)
amount = models.IntegerField()
class ComputerRamRelation(models.Model):
ram = models.ForeignKey(Ram, on_delete=models.CASCADE)
computer = models.ForeignKey(Computer, on_delete=models.CASCADE)
amount = models.IntegerField()
#+END_SRC
2017-12-22 17:02:24 +01:00
#+BEGIN_SRC python :tangle ../inventory/models.py :padline 2
2017-12-22 17:02:24 +01:00
class Warranty(models.Model):
device = models.ForeignKey(Device, on_delete=models.CASCADE)
files = models.FileField()
valid_until = models.DateField()
def __str__(self):
return self.device
#+END_SRC
2017-12-22 17:02:24 +01:00
#+BEGIN_SRC python :tangle ../inventory/models.py :padline 2
2017-12-22 17:02:24 +01:00
class CronJob(models.Model):
name = models.CharField(max_length=50)
host = models.ForeignKey(Computer, on_delete=models.CASCADE)
command = models.CharField(max_length=50)
time = models.TimeField()
weekday = models.ForeignKey(Weekday, on_delete=models.CASCADE)
month = models.ForeignKey(Month, on_delete=models.CASCADE)
def __str__(self):
return self.name
2017-12-22 14:13:51 +01:00
#+END_SRC
* Admin
2017-12-22 17:02:24 +01:00
#+BEGIN_SRC python :tangle ../inventory/admin.py
2017-12-22 14:13:51 +01:00
from django.contrib import admin
2017-12-22 17:02:24 +01:00
from inventory.models import (Device, Weekday, Month, RamType, Ram,
DiskType, DiskSize, Disk, Architecture,
CpuManufacturer, Cpu, OperatingSystem, Raid,
Computer, ComputerDiskRelation,
ComputerRamRelation, Warranty, CronJob)
#+END_SRC
2017-12-22 17:02:24 +01:00
class RamInline(admin.StackedInline):
#+BEGIN_SRC python :tangle ../inventory/admin.py :padline 2
2017-12-22 17:02:24 +01:00
model = ComputerRamRelation
verbose_name_plural = 'Ram Modules'
class DiskInline(admin.StackedInline):
model = ComputerDiskRelation
verbose_name_plural = 'Disks'
class ComputerAdmin(admin.ModelAdmin):
inlines = (RamInline, DiskInline)
#+END_SRC
2017-12-22 17:02:24 +01:00
2017-12-22 14:13:51 +01:00
#+BEGIN_SRC python :tangle ../inventory/admin.py :padline 2
2017-12-22 17:02:24 +01:00
admin.site.register(Device)
admin.site.register(Weekday)
admin.site.register(Month)
admin.site.register(RamType)
admin.site.register(Ram)
admin.site.register(DiskType)
admin.site.register(DiskSize)
admin.site.register(Disk)
admin.site.register(Architecture)
admin.site.register(CpuManufacturer)
admin.site.register(Cpu)
admin.site.register(OperatingSystem)
admin.site.register(Raid)
admin.site.register(Computer)
admin.site.register(ComputerDiskRelation)
admin.site.register(ComputerRamRelation)
admin.site.register(Warranty)
admin.site.register(CronJob)
2017-12-22 14:13:51 +01:00
#+END_SRC
* Views
2017-12-22 17:02:24 +01:00
#+BEGIN_SRC python :tangle ../inventory/views.py
2017-12-22 14:13:51 +01:00
#!/usr/bin/python3
from django.shortcuts import get_object_or_404, render
#+END_SRC