2016-04-12 8 views
0

Ich entwickle eine Server-Komponente mit Python.Systemanforderungen heruntersetzen: MIN_CPU_COUNT, MIN_RAM

Ich mag die Systemanforderungen zu:

  • MIN_CPU_COUNT
  • MIN_RAM
  • ...

Gibt es eine Möglichkeit (vielleicht in setup.py) etwas zu definieren, so was?

Meine Software benötigt mindestens N CPUs und M RAM?

Warum? Weil wir in der Vergangenheit Probleme hatten, weil Betreiber die Serverkomponente auf einen weniger leistungsfähigen Server verschoben haben und wir die Service-Level-Vereinbarung nicht sicherstellen konnten.

+0

Da Sie beliebigen Python-Code ausführen können in 'setup.py' es möglich sein sollte, solche Kontrollen durchzuführen ([CPUs] (http://stackoverflow.com/a/1006337/ 3005167), [RAM] (http://stackoverflow.com/a/22103295/3005167)) direkt dort und bail out, wenn die Bedingungen nicht erfüllt sind. Ich weiß nicht, ob solche Funktionalität in Distutils eingebaut ist - aber ich denke nicht. – kazemakase

+0

@kazemakase Ja, ich könnte den Check in setup.py ausführen. Aber ich spalte es gerne: Mein Programm definiert die Einschränkungen, und ein anderer Teil ist für das Testen zuständig. "untestest" kommt mir in den Sinn, aber hier ist es kein Unitest, es ist ein Systemtest. – guettli

Antwort

1

Ich habe es so implementiert.

Feedback willkommen

from django.conf import settings 
import psutil 
import humanfriendly 
from djangotools.utils import testutils 

class Check(testutils.Check): 

    @testutils.skip_if_not_prod 
    def test_min_cpu_count(self): 
     min_cpu_count=getattr(settings, 'MIN_CPU_COUNT', None) 
     self.assertIsNotNone(min_cpu_count, 'settings.MIN_CPU_COUNT not set. Please supply a value.') 
     self.assertLessEqual(min_cpu_count, psutil.cpu_count()) 

    @testutils.skip_if_not_prod 
    def test_min_physical_memory(self): 
     min_physical_memory_orig=getattr(settings, 'MIN_PHYSICAL_MEMORY', None) 
     self.assertIsNotNone(min_physical_memory_orig, "settings.MIN_PHYSICAL_MEMORY not set. Please supply a value. Example: MIN_PHYSICAL_MEMORY='4G'") 
     min_physical_memory_bytes=humanfriendly.parse_size(min_physical_memory_orig) 
     self.longMessage=False 
     self.assertLessEqual(min_physical_memory_bytes, psutil.virtual_memory().total, 'settings.MIN_PHYSICAL_MEMORY=%r is not satisfied. Total virtual memory of current hardware: %r' % (
      min_physical_memory_orig, humanfriendly.format_size(psutil.virtual_memory().total)))