예제 #1
0
 private function update_location($sub, $ip)
 {
     $rack = $ip->network->device->racks;
     $room = $rack->rooms;
     $floor = $room->floors;
     $building = $floor->buildings;
     $loc = \Ipm\Model_Location::find()->where('rack', $rack['id'])->where('node', $sub->id)->get_one();
     if (!$loc) {
         $in = array('node' => $sub->id, 'type' => 0, 'building' => $building['id'], 'floor' => $floor['id'], 'room' => $room['id'], 'rack' => $rack['id'], 'pos_from' => 1, 'pos_to' => $rack['size']);
         $location = new \Ipm\Model_Location($in);
         $location->save();
     }
 }
예제 #2
0
 public static function IsValidLocation($sub, $device, $ip)
 {
     $valid = false;
     $locations = \Ipm\Model_Location::find()->where('node', $sub->id)->get();
     \Log::debug('isvalid ::');
     $device = $ip->network->device;
     $data = array($device->racks->rooms->id, $device->racks->rooms->floors->id, $device->racks->rooms->floors->buildings->id);
     foreach ($locations as $loc) {
         if ($loc->rack > 0) {
             //different racks
             if ($loc->rack == $device->racks->id) {
                 if ($device->rack_pos >= $loc->pos_from and $device->rack_pos <= $loc->pos_to) {
                     \Log::debug('rack ok::' . $ip->ipv4);
                     $valid = true;
                 }
             }
         } else {
             $fields = array('room', 'floor', 'building');
             for ($i = 0; $i <= 2; $i++) {
                 if ($loc[$fields[$i]] > 0) {
                     if ($loc[$fields[$i]] == $data[$i]) {
                         $valid = true;
                         \Log::debug($fields[$i] . '::' . $ip->ipv4);
                     }
                 }
             }
         }
     }
     if (!$valid) {
         \Log::debug('clean ip port::' . $ip->ipv4);
         $ipv4 = new \Ipm\Ipv4object($ip->ipv4);
         $ipv4Int = $ipv4->toInt();
         if ($ipv4Int > 0) {
             $q = array('ip_dotted' => $ip->ipv4, 'ip_int' => $ipv4Int, 'time' => time(), 'device' => 0, 'devname' => '', 'user' => 1);
             if ($ipv4Int > 0) {
                 $history = new \Ipm\Model_History($q);
                 $history->save();
             }
         }
         $ip->ipv4 = '';
         $ip->save();
     }
 }
예제 #3
0
 public function action_index()
 {
     $val2 = \Validation::forge('data');
     $val2->add_field('name', 'subnet name', 'required|min_length[1]|max_length[50]');
     if ($val2->run()) {
         $out = array();
         if ($this->type >= 0) {
             $lo = \Ipm\Model_Location::find()->where('id', $val2->validated('name'))->get_one();
             if ($lo) {
                 $lo->delete();
                 $o = $this->structure();
                 $out = array('status' => 'ok', 'data' => $o);
             } else {
                 $out = array('status' => 'no');
             }
             echo json_encode($out);
         }
     }
 }