2016-04-12 10 views
0

私はPythonでサーバーコンポーネントを開発します。私は、システム要件を見極めるたいシステム要件をネイルダウン:MIN_CPU_COUNT、MIN_RAM

  • MIN_CPU_COUNT
  • MIN_RAM
  • ...

何かを定義する(多分setup.pyで)方法はありますこのような?

私のソフトウェアには少なくともN個のCPUとM RAMが必要ですか?

なぜですか?なぜなら、オペレータはサーバーコンポーネントを機能の低いサーバーに移行し、サービスレベル契約を確実にすることができなかったため、私たちは過去にトラブルを抱えていたからです。

+0

あなたが任意のPythonコードを実行することができるので、 'このようなチェックを実行することが可能であるべきsetup.py'([CPUの(http://stackoverflow.com/a/1006337/ 3005167)、[RAM](http://stackoverflow.com/a/22103295/3005167))があり、条件が満たされていない場合はすぐに破棄されます。そのような機能がdistutilsに組み込まれているかどうかはわかりませんが、そうは思わないでしょう。 – kazemakase

+0

@kazemakaseはい、setup.pyでチェックを実行できます。しかし、私はそれを分割するのが好きです:私のプログラムは制約を定義し、他の部分はテストを担当します。 「unittest」が私の頭に浮かびますが、ここでは単体テストではなく、システムテストです。 – guettli

答えて

1

この方法で実装しました。

フィードバック歓迎

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))) 
関連する問題