@@ -59,42 +59,70 @@ class Asset(models.Model):
5959 ('Other' , 'Other' ),
6060 )
6161 id = models .UUIDField (default = uuid .uuid4 , primary_key = True )
62- ip = models .GenericIPAddressField (max_length = 32 , verbose_name = _ ('IP' ), db_index = True )
63- hostname = models .CharField (max_length = 128 , unique = True , verbose_name = _ ('Hostname' ))
62+ ip = models .GenericIPAddressField (max_length = 32 , verbose_name = _ ('IP' ),
63+ db_index = True )
64+ hostname = models .CharField (max_length = 128 , unique = True ,
65+ verbose_name = _ ('Hostname' ))
6466 port = models .IntegerField (default = 22 , verbose_name = _ ('Port' ))
65- platform = models .CharField (max_length = 128 , choices = PLATFORM_CHOICES , default = 'Linux' , verbose_name = _ ('Platform' ))
66- domain = models .ForeignKey ("assets.Domain" , null = True , blank = True , related_name = 'assets' , verbose_name = _ ("Domain" ), on_delete = models .SET_NULL )
67- nodes = models .ManyToManyField ('assets.Node' , default = default_node , related_name = 'assets' , verbose_name = _ ("Nodes" ))
67+ platform = models .CharField (max_length = 128 , choices = PLATFORM_CHOICES ,
68+ default = 'Linux' , verbose_name = _ ('Platform' ))
69+ domain = models .ForeignKey ("assets.Domain" , null = True , blank = True ,
70+ related_name = 'assets' , verbose_name = _ ("Domain" ),
71+ on_delete = models .SET_NULL )
72+ nodes = models .ManyToManyField ('assets.Node' , default = default_node ,
73+ related_name = 'assets' ,
74+ verbose_name = _ ("Nodes" ))
6875 is_active = models .BooleanField (default = True , verbose_name = _ ('Is active' ))
6976
7077 # Auth
71- admin_user = models .ForeignKey ('assets.AdminUser' , on_delete = models .PROTECT , null = True , verbose_name = _ ("Admin user" ))
78+ admin_user = models .ForeignKey ('assets.AdminUser' , on_delete = models .PROTECT ,
79+ null = True , verbose_name = _ ("Admin user" ))
7280
7381 # Some information
74- public_ip = models .GenericIPAddressField (max_length = 32 , blank = True , null = True , verbose_name = _ ('Public IP' ))
75- number = models .CharField (max_length = 32 , null = True , blank = True , verbose_name = _ ('Asset number' ))
82+ public_ip = models .GenericIPAddressField (max_length = 32 , blank = True ,
83+ null = True ,
84+ verbose_name = _ ('Public IP' ))
85+ number = models .CharField (max_length = 32 , null = True , blank = True ,
86+ verbose_name = _ ('Asset number' ))
7687
7788 # Collect
78- vendor = models .CharField (max_length = 64 , null = True , blank = True , verbose_name = _ ('Vendor' ))
79- model = models .CharField (max_length = 54 , null = True , blank = True , verbose_name = _ ('Model' ))
80- sn = models .CharField (max_length = 128 , null = True , blank = True , verbose_name = _ ('Serial number' ))
81-
82- cpu_model = models .CharField (max_length = 64 , null = True , blank = True , verbose_name = _ ('CPU model' ))
89+ vendor = models .CharField (max_length = 64 , null = True , blank = True ,
90+ verbose_name = _ ('Vendor' ))
91+ model = models .CharField (max_length = 54 , null = True , blank = True ,
92+ verbose_name = _ ('Model' ))
93+ sn = models .CharField (max_length = 128 , null = True , blank = True ,
94+ verbose_name = _ ('Serial number' ))
95+
96+ cpu_model = models .CharField (max_length = 64 , null = True , blank = True ,
97+ verbose_name = _ ('CPU model' ))
8398 cpu_count = models .IntegerField (null = True , verbose_name = _ ('CPU count' ))
8499 cpu_cores = models .IntegerField (null = True , verbose_name = _ ('CPU cores' ))
85- memory = models .CharField (max_length = 64 , null = True , blank = True , verbose_name = _ ('Memory' ))
86- disk_total = models .CharField (max_length = 1024 , null = True , blank = True , verbose_name = _ ('Disk total' ))
87- disk_info = models .CharField (max_length = 1024 , null = True , blank = True , verbose_name = _ ('Disk info' ))
88-
89- os = models .CharField (max_length = 128 , null = True , blank = True , verbose_name = _ ('OS' ))
90- os_version = models .CharField (max_length = 16 , null = True , blank = True , verbose_name = _ ('OS version' ))
91- os_arch = models .CharField (max_length = 16 , blank = True , null = True , verbose_name = _ ('OS arch' ))
92- hostname_raw = models .CharField (max_length = 128 , blank = True , null = True , verbose_name = _ ('Hostname raw' ))
93-
94- labels = models .ManyToManyField ('assets.Label' , blank = True , related_name = 'assets' , verbose_name = _ ("Labels" ))
95- created_by = models .CharField (max_length = 32 , null = True , blank = True , verbose_name = _ ('Created by' ))
96- date_created = models .DateTimeField (auto_now_add = True , null = True , blank = True , verbose_name = _ ('Date created' ))
97- comment = models .TextField (max_length = 128 , default = '' , blank = True , verbose_name = _ ('Comment' ))
100+ memory = models .CharField (max_length = 64 , null = True , blank = True ,
101+ verbose_name = _ ('Memory' ))
102+ disk_total = models .CharField (max_length = 1024 , null = True , blank = True ,
103+ verbose_name = _ ('Disk total' ))
104+ disk_info = models .CharField (max_length = 1024 , null = True , blank = True ,
105+ verbose_name = _ ('Disk info' ))
106+
107+ os = models .CharField (max_length = 128 , null = True , blank = True ,
108+ verbose_name = _ ('OS' ))
109+ os_version = models .CharField (max_length = 16 , null = True , blank = True ,
110+ verbose_name = _ ('OS version' ))
111+ os_arch = models .CharField (max_length = 16 , blank = True , null = True ,
112+ verbose_name = _ ('OS arch' ))
113+ hostname_raw = models .CharField (max_length = 128 , blank = True , null = True ,
114+ verbose_name = _ ('Hostname raw' ))
115+
116+ labels = models .ManyToManyField ('assets.Label' , blank = True ,
117+ related_name = 'assets' ,
118+ verbose_name = _ ("Labels" ))
119+ created_by = models .CharField (max_length = 32 , null = True , blank = True ,
120+ verbose_name = _ ('Created by' ))
121+ date_created = models .DateTimeField (auto_now_add = True , null = True ,
122+ blank = True ,
123+ verbose_name = _ ('Date created' ))
124+ comment = models .TextField (max_length = 128 , default = '' , blank = True ,
125+ verbose_name = _ ('Comment' ))
98126
99127 objects = AssetManager ()
100128
@@ -121,6 +149,22 @@ def get_nodes(self):
121149 nodes = self .nodes .all () or [Node .root ()]
122150 return nodes
123151
152+ @property
153+ def nodes_cache_key (self ):
154+ key = "NODES_OF_{}" .format (str (self .id ))
155+ return key
156+
157+ def get_nodes_or_cache (self ):
158+ cached = cache .get (self .nodes_cache_key )
159+ if cached is not None :
160+ return cached
161+ nodes = list (self .get_nodes ())
162+ cache .set (self .nodes_cache_key , nodes , 3600 )
163+ return nodes
164+
165+ def expire_nodes_cache (self ):
166+ cache .delete (self .nodes_cache_key )
167+
124168 @property
125169 def hardware_info (self ):
126170 if self .cpu_count :
0 commit comments