2013-03-27 6 views
1

현재 DSL 연결을 위해 작동하는 DSLAM 관리 사이트가 있습니다. 현재 DSLAM IP 주소를 자동으로 ping하여 DSLAM 상태 업데이트를 자체적으로 수행하는 것이 일하고 싶습니다. 요청이 양호하면 boolean = True를 반환하고 그렇지 않으면 boolean = False를 저장하고 저장합니다. 지금까지는 작동하지 않으며 여기에서 어디로 가야할지 모르겠습니다.Django - Python Ping으로 모델 불리언 검사

models.py는

from django.db import models 
import os,sys 

class DslamManager(models.Manager): 
    def dslam_status(self, ip_address): 
     if os.system('ping' + ip_address): 
      dslam_status = super(DslamManager, self).get(ip_address) 
      dslam_status = True 
      dslam_status.save() 
     else: 
      dslam_status = super(DslamManager, self) 
      dslam_status = False 
      dslam_status.save() 


class Location(models.Model): 
    location_name = models.CharField(max_length=30) 
    island_name = models.CharField(max_length=30) 

    class Meta: 
     ordering = ['location_name'] 

    def __unicode__(self): 
     return self.location_name 


class Dslam(models.Model): 
    dslam_name = models.CharField(max_length=32) 
    ip_address = models.CharField(max_length=128) 
    location = models.ForeignKey(Location) 
    notes = models.TextField(blank=True) 
    dslam_status = models.BooleanField() 
    objects = DslamManager() 

    class Meta: 
     ordering = ['location', 'id'] 

    def __unicode__(self): 
     return self.dslam_name 
+0

올바른 os.system ('ping'+ ip_address)인지 확실하지 않습니다. os.system ('ping'+ ip_address)이되어서는 안됩니다. 또한 나는 [명령] (http://docs.python.org/2/library/commands.html)을 사용하여 특히 commands.getstatusoutput 메서드가 도움이된다고 생각합니다. –

답변

1

나는 종류의 ModelAdmin에 추가하여이 문제를 해결했습니다. 새로 고침하는 데 약간의 시간이 걸리지 만, IP 주소 목록을 핑 (ping)하려고 시도하기 때문입니다.

list_display = ('DSLAM_STATUS',) 

def DSLAM_STATUS(self, obj): 

    if os.system('ping -w 1 -n 1 ' + obj.ip_address): 
     DSLAM_STATUS = False 
    else: 
     DSLAM_STATUS = True 
    return DSLAM_STATUS 

DSLAM_STATUS.boolean = True 
DSLAM_STATUS.allow_tags = True 

이것은 약간의 시간 동안 만 작동하지만, ip_address를 핑하는 데 걸리는 시간은 너무 빨라요.

+1

나는 명령이 잘못되었다고 생각한다.'-n' 다음에 "1"이 없어야한다.''ping -w 1 -n '+ obj.ip_address' – TheBronx