source: trunk/system/generators/queue.php@ 507

Last change on this file since 507 was 507, checked in by chronos, 12 years ago
  • Opraveno: Generování nastavení sítě. Generování front Queue nyní pracuje s přiřazením služeb k zařízením a podsítím.
  • Opraveno: Zjišťování adresáře souborů na disku dle id adresáře.
File size: 6.0 KB
Line 
1<?php
2if(isset($_SERVER['REMOTE_ADDR'])) die();
3
4$Enabled = 1;
5$ClassesEnabled = 1;
6$SessionDisable = true;
7include('../../Common/Global.php');
8include('../routerboard.php');
9include('common.php');
10$PathQueue = array('queue', 'tree');
11$Database = &$System->Database;
12
13$Routerboard = new Routerboard();
14$Routerboard->UserName = $Config['MainRouter']['UserName'];
15$Routerboard->Timeout = $Config['MainRouter']['ConnectTimeout'];
16$Routerboard->HostName = $Config['MainRouter']['HostName'];
17$Routerboard->Debug = true;
18
19$Finance = &$System->Modules['Finance'];
20$Finance->LoadMonthParameters(0);
21
22// Generate traffic shaping rules
23//$TotalMaxSpeedIn = 4048; //$RealMaxSpeed; //1536;
24//TotalMaxSpeedOut = 3048; //$RealMaxSpeed; //1536;
25//$UsersMaxSpeedIn = 1900; //$MaxSpeed;
26//$UsersMaxSpeedOut = 1900; //$MaxSpeed;
27
28$InDivider = 1;
29$OutDivider = 1;
30$TotalMaxSpeedIn = round($Finance->RealMaxSpeed / $InDivider) * 1000;
31$TotalMaxSpeedOut = round($Finance->RealMaxSpeed / $OutDivider) * 1000;
32$UsersMaxSpeedIn = round($Finance->MaxSpeed / $InDivider) * 1000;
33$UsersMaxSpeedOut = round($Finance->MaxSpeed / $OutDivider) * 1000;
34$VoipMaxSpeedIn = $TotalMaxSpeedIn - 136;
35$VoipMaxSpeedOut = $TotalMaxSpeedOut - 136;
36$VoipSpeedIn = 100; //$SpeedReserve;
37$VoipSpeedOut = 100; //$SpeedReserve;
38$OutInterface = 'eth1';
39$InInterface = 'ifb0';
40$InetInterface = $Config['MainRouter']['InetInterface'];
41$FreeInetSpeed = $Finance->Tariffs[TARIFF_FREE]['InternetSpeedMax'];
42
43$ItemsQueue = array();
44
45// Root of tree and main limit
46$ItemsQueue[] = array('name' => 'main-out', 'limit-at' => $UsersMaxSpeedIn, 'max-limit' => $UsersMaxSpeedIn, 'parent' => 'global-out');
47$ItemsQueue[] = array('name' => 'main-in', 'limit-at' => $UsersMaxSpeedOut, 'max-limit' => $UsersMaxSpeedOut, 'parent' => 'global-out');
48
49// Divide rules by subnet number
50$DbResult = $Database->query('SELECT `Id`, `Name`, `AddressRange`, `Mask` FROM `NetworkSubnet`');
51// Slow free internet
52$PacketMark = GetMarkByComment('free-out');
53$ItemsQueue[] = array('name' => 'free-out', 'limit-at' => $FreeInetSpeed, 'max-limit' => $FreeInetSpeed, 'parent' => 'main-out', 'packet-mark' => $PacketMark);
54$PacketMark = GetMarkByComment('free-in');
55$ItemsQueue[] = array('name' => 'free-in', 'limit-at' => $FreeInetSpeed, 'max-limit' => $FreeInetSpeed, 'parent' => 'main-in', 'packet-mark' => $PacketMark);
56
57// Process users
58$DbResult = $Database->query('SELECT `Member`.*, `Subject`.`Name` FROM `Member` LEFT JOIN `Subject` ON `Subject`.`Id` = `Member`.`Subject` WHERE `Member`.`Blocked`=0');
59while($Member = $DbResult->fetch_assoc())
60{
61 $Member['Name'] = RouterOSIdent($Member['Name'].'-'.$Member['Id'] );
62
63 echo('Zákazník '.$Member['Name']."\n");
64 $DbResult4 = $Database->query('SELECT `Service`.*, `ServiceCustomerRel`.`Id` AS `RelId` FROM `ServiceCustomerRel` JOIN `Service` ON `Service`.`Id` = `ServiceCustomerRel`.`Service` '.
65 'WHERE (`ServiceCustomerRel`.`Customer` = '.$Member['Id'].') AND (`ServiceCustomerRel`.`Action` IS NULL)');
66 while($Service = $DbResult4->fetch_assoc())
67 {
68 echo('Služba '.$Service['Name'].': ');
69 $SpeedIn = round($Service['InternetSpeedMin'] / $InDivider) * 1000;
70 $SpeedOut = round($Service['InternetSpeedMin'] / $OutDivider) * 1000;
71 $UserMaxSpeedIn = round($Service['InternetSpeedMax'] / $InDivider) * 1000;
72 $UserMaxSpeedOut = round($Service['InternetSpeedMax'] / $OutDivider) * 1000;
73 $ItemsQueue[] = array('name' => $Member['Name'].'-out', 'limit-at' => $SpeedIn, 'max-limit' => $UserMaxSpeedIn, 'parent' => 'main-out');
74 $ItemsQueue[] = array('name' => $Member['Name'].'-in', 'limit-at' => $SpeedOut, 'max-limit' => $UserMaxSpeedOut, 'parent' => 'main-in');
75
76 $Filter = '(`Used` = 1) AND (`Service` = '.$Service['RelId'].')';
77 $DbResult2 = $Database->select('NetworkDevice', 'COUNT(*)', $Filter);
78 $Row = $DbResult2->fetch_row();
79 $HostCount = $Row[0];
80 if($HostCount > 0)
81 {
82 $HostSpeedIn = round($SpeedIn / $HostCount);
83 $HostSpeedOut = round($SpeedOut / $HostCount);
84 } else
85 {
86 $HostSpeedIn = $SpeedIn;
87 $HostSpeedOut = $SpeedOut;
88 }
89
90 $DbResult2 = $Database->select('NetworkDevice', '*', $Filter);
91 while($Device = $DbResult2->fetch_assoc())
92 {
93 $DbResult3 = $Database->select('NetworkInterface', '*', '`Device` = '.$Device['Id'].' AND `LocalIP` != ""');
94 while($Interface = $DbResult3->fetch_assoc())
95 {
96 $Name = $Device['Name'];
97 if($Interface['Name'] != '') $Name .= '-'.$Interface['Name'];
98 $Name = RouterOSIdent($Name);
99 echo($Name.', ');
100 $IPParts = explode('.', $Interface['LocalIP']);
101 $Subnet = $IPParts[2];
102 $PacketMark = GetMarkByComment($Name.'-out');
103 $ItemsQueue[] = array('name' => $Name.'-out', 'limit-at' => $HostSpeedIn, 'max-limit' => $UserMaxSpeedIn, 'parent' => $Member['Name'].'-out', 'packet-mark' => $PacketMark);
104 $PacketMark = GetMarkByComment($Name.'-in');
105 $ItemsQueue[] = array('name' => $Name.'-in', 'limit-at' => $HostSpeedOut, 'max-limit' => $UserMaxSpeedOut, 'parent' => $Member['Name'].'-in', 'packet-mark' => $PacketMark);
106 }
107 }
108
109 $DbResult2 = $Database->select('NetworkSubnet', '*', '`Service`='.$Service['RelId']);
110 while($Subnet = $DbResult2->fetch_assoc())
111 {
112 $Subnet['Name'] = RouterOSIdent('subnet-'.$Subnet['Name']);
113 echo($Subnet['Name'].', ');
114 $IPParts = explode('.', $Subnet['AddressRange']);
115 $SubnetNumber = $IPParts[2];
116 $PacketMark = GetMarkByComment($Subnet['Name'].'-out');
117 $ItemsQueue[] = array('name' => $Subnet['Name'].'-out', 'limit-at' => $HostSpeedIn, 'max-limit' => $UserMaxSpeedIn, 'parent' => $Member['Name'].'-out', 'packet-mark' => $PacketMark);
118 $PacketMark = GetMarkByComment($Subnet['Name'].'-in');
119 $ItemsQueue[] = array('name' => $Subnet['Name'].'-in', 'limit-at' => $HostSpeedOut, 'max-limit' => $UserMaxSpeedOut, 'parent' => $Member['Name'].'-in', 'packet-mark' => $PacketMark);
120 }
121 echo("\n");
122 }
123}
124
125//print_r($ItemsQueue);
126$Routerboard->ListUpdate($PathQueue, array('name', 'limit-at', 'max-limit', 'parent', 'packet-mark'), $ItemsQueue, array(), true);
127
128?>
Note: See TracBrowser for help on using the repository browser.