1

私は現在、DSL接続用のDSLAM管理サイトを持っています。現在、私が働きたいのは、DSLAM IPアドレスに自動的にpingを実行することにより、DSLAMステータスを自動的に更新することです。リクエストが適切な場合は、boolean = Trueを返して保存します。それ以外の場合は、boolean=Falseを返して保存します。これまでのところ機能しておらず、ここからどこに行くべきかわからない。

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
4

1 に答える 1

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にpingを実行するのにかかる時間が速すぎる場合があると思います。

于 2013-04-09T22:17:56.370 に答える