Revize 863
Přidáno uživatelem Michal Kliment před více než 13 roky(ů)
freenetis/branches/ulogd/application/i18n/cs_CZ/texts.php | ||
---|---|---|
'activated number has not been changed' => 'Aktivované číslo již nelze změnit',
|
||
'activation date' => 'Datum aktivace',
|
||
'active' => 'Aktivní',
|
||
'active members' => 'Aktivní členové',
|
||
'active message' => 'Aktivní zpráva',
|
||
'active redirections' => 'Aktivní přesměrování',
|
||
'actual' => 'Aktuální',
|
||
... | ... | |
'backup informations have been successfully updated' => 'Informace o zálohování byly úspěšně aktualizovány',
|
||
'backup name' => 'Jméno zálohy',
|
||
'bad entrance date' => 'Chybný datum vstupu.',
|
||
'bad format' => 'Špatný formát',
|
||
'bad icq format' => 'Špatný formát ICQ.',
|
||
'bad phone format' => 'Špatný formát telefonu',
|
||
'bad variable symbol format' => 'Špatný formát variabilního symbolu.',
|
||
... | ... | |
'birthday' => 'Datum narození',
|
||
'bitrate' => 'Rychlost přenosu',
|
||
'before getting started, we need some information on the database' => 'Předtím než začneme, potřebujeme několik informací o databázi.',
|
||
'both' => 'obojí',
|
||
'but i can\'t set file permission to 660' => 'Ale nemůžu nastavit oprávnění souboru na 660',
|
||
'but i can\'t write the configphp file' => 'Ale nemůžu zapisovat do souboru <code>config.php</code>.',
|
||
'but i can\'t write the htaccess file' => 'Ale nemůžu zapisovat do souboru <code>.htaccess</code>.',
|
||
... | ... | |
'contractual increase' => 'Smluvní navýšení',
|
||
'cookies must be enabled' => 'Musí být zapnuty cookies.',
|
||
'count' => 'Počet',
|
||
'count of active members' => 'Počet aktivních členů',
|
||
'count of address points' => 'Počet adresních bodů',
|
||
'count of members' => 'Počet členů',
|
||
'counteraccount' => 'Protiúčet',
|
||
... | ... | |
'interfaces' => 'Rozhraní',
|
||
'interval is required' => 'Interval je povinný',
|
||
'interval of interruption collides with another interruption of this member' => 'Interval přerušení koliduje s jiným přerušením tohoto člena',
|
||
'interval of update' => 'Interval aktualizace',
|
||
'invalid date' => 'Neplatné datum!',
|
||
'invalid ip address' => 'Chybná IP adresa',
|
||
'invalid network address' => 'Neplatná adresa sítě !',
|
||
... | ... | |
'july' => 'Červenec',
|
||
'language' => 'Jazyk',
|
||
'last time login' => 'Poslední čas přihlášení',
|
||
'last update' => 'poslední aktualizace',
|
||
'leaving date' => 'Datum vystoupení',
|
||
'leaving_date' => 'Datum vystoupení',
|
||
'length' => 'Délka',
|
||
... | ... | |
'new transfer from account' => 'Nový převod z účtu',
|
||
'next' => 'Další',
|
||
'next step' => 'Další krok',
|
||
'next update' => 'příští aktualizace',
|
||
'nineth-degree certified engineers' => 'Certifikování technici devátého stupně',
|
||
'no' => 'ne',
|
||
'no redirection is possible to set for this ip address' => 'Žádné přesměrování není možné nastavit pro tuto IP adresu.',
|
||
... | ... | |
'type of double-entry account' => 'Typ podvojného účtu',
|
||
'type of the recipient' => 'Typ příjemce',
|
||
'type of redirection' => 'Typ přesměrování',
|
||
'type of traffic' => 'Typ provozu',
|
||
'type' => 'Typ',
|
||
'types count' => 'Počet typů',
|
||
'unconfirmed works' => 'Nepotvrzené práce',
|
freenetis/branches/ulogd/application/i18n/cs_CZ/help.php | ||
---|---|---|
'recalculate_account_balances' => 'Primárním zdrojem o stavu financí v systému jsou převody. Zůstatky na účtech byly dříve pokaždé počítány na požádání z převodů. Nyní si každý účet ukládá svůj zůstatek kvůli vyšší rychlosti. Tuto funkci použijete v případě přechodu na verzi systému, která tuto optimalizaci obsahuje.',
|
||
'recalculate_fees' => 'Pro primární strhávání členských příspěvků používejte funkci pro globální strhávání členských příspěvků v Účetním deníku. Tuto funkci používejte opatrně a to jen v případě, že máte správně strženy všechny členské příspěvky pro všechny členy od založení sdružení až po současné datum. Pak můžete tomuto členovi přepočítat stržení členských příspěvků v případě, že u něj došlo k nutnosti je přepočítat, např. chybné datum vstupu, vznikla nutnost přidat přerušení členství apod.',
|
||
'recalculate_entrance_fees' => 'Pro primární strhávání vstupních příspěvků používejte funkci pro globální strhávání v účetním deníku. Tuto funkci používejte jen v případě, že došlo k nějakému omylu, například, že měl zaplatit vstupní a pak se ukázalo, že nemusel.',
|
||
'ulogd_active' => 'Jedná se o seznam (z pohledu typu provozu) příliš aktivních členů. Tento seznam se používá například pro vyhodnocování QoSu pro členy (členové z tohoto seznamu jsou mírně znevýhodněni oproti ostatním členům), aktualizuje při každé aktualizaci ulogd, viz. Interval aktualizace.',
|
||
'ulogd_active_count' => 'Počet (z pohledu typu provozu) příliš aktivních členů. Může být zadán absolutně (číslem) nebo relativně (v procentech). Výchozí hodnota je 10%.',
|
||
'ulogd_active_type' => 'Typ provozu, podle kterého se mají hledat příliš aktivní členové. Možné hodnoty jsou: upload, download nebo obojí.',
|
||
'ulogd_update_interval' => 'Interval aktualizace ulogd v sekundách. Po uplynutí této doby se zaktualizují počítadla provozu členů a najdou se příliš aktivní členové. Výchozí hodnota je 1800 sekund (30 minut).',
|
||
'unidentified_transfers' => 'Neidentifikované platby jsou všechny příchozí bankovní platby, které nebyl náš systém schopen z různých důvodů automaticky rozpoznat. Typicky se jedná o platby s chybným variabilním symbolem. Pokud zde svoji platbu najdete, pak kontaktujte hospodáře sdružení pro její správné přiřazení.',
|
||
'variable_symbol' => 'Variabilní symbol slouží k jednoznačnému určení příchozí platby člena.'
|
||
);
|
freenetis/branches/ulogd/application/helpers/valid.php | ||
---|---|---|
}
|
||
|
||
/**
|
||
* Checks whether a string is valid ulogd active count
|
||
*
|
||
* @author Michal Kliment
|
||
* @param string input string
|
||
* @return boolean
|
||
*/
|
||
public static function ulogd_active_count($str)
|
||
{
|
||
return preg_match('/^[0-9]+(\.[0-9]+)?%?$/', $str);
|
||
}
|
||
|
||
/**
|
||
* Checks whether a string is a valid text.
|
||
*
|
||
* @param string $str
|
freenetis/branches/ulogd/application/models/member.php | ||
---|---|---|
SET m.locked = 1
|
||
WHERE m.id = mi.mid");
|
||
}
|
||
|
||
/**
|
||
* Returns count of all non-former members without membership interrupt in that time and without set-up qos rate
|
||
*
|
||
* @author Michal Kliment
|
||
* @return integer
|
||
*/
|
||
public function count_all_members_to_ulogd()
|
||
{
|
||
$result = $this->db->query("
|
||
SELECT COUNT(m.id) AS total_members_count FROM members m
|
||
WHERE m.type <> 15 AND (m.qos_rate IS NULL OR m.qos_rate = 0) AND m.id NOT IN
|
||
(
|
||
SELECT mi.member_id FROM membership_interrupts mi JOIN members_fees mf ON mi.members_fee_id = mf.id WHERE mf.activation_date <= CURDATE() AND CURDATE() <= mf.deactivation_date
|
||
)
|
||
");
|
||
|
||
return ($result && $result->current()) ? $result->current()->total_members_count : 0;
|
||
}
|
||
}
|
||
|
||
?>
|
freenetis/branches/ulogd/application/controllers/web_interface.php | ||
---|---|---|
public function active_traffic_members_ip_addresses()
|
||
{
|
||
$ips = $this->db->query("
|
||
SELECT q3.* FROM
|
||
SELECT IFNULL(ip.ip_address, vip.ip_address) AS ip_address FROM
|
||
(
|
||
SELECT IFNULL(ip.ip_address, ip2.ip_address) AS ip_address, q2.name, q2.download FROM
|
||
(
|
||
SELECT m.*, SUM(q1.download/1073741824) AS download FROM
|
||
(
|
||
SELECT u.*, IFNULL(i.device_id,i2.device_id) AS device_id FROM
|
||
(
|
||
SELECT ip2str(orig_ip_saddr) as src, sum(orig_raw_pktlen) as upload, sum(reply_raw_pktlen) as download, (orig_raw_pktlen+reply_raw_pktlen) AS total FROM ulog2_ct u group by orig_ip_saddr ORDER BY download DESC LIMIT 0,200
|
||
) AS u
|
||
JOIN ip_addresses ip ON u.src = ip.ip_address
|
||
LEFT JOIN ifaces i ON ip.iface_id = i.id
|
||
LEFT JOIN vlan_ifaces vi ON ip.vlan_iface_id = vi.id
|
||
LEFT JOIN ifaces i2 ON vi.iface_id = i2.id
|
||
) AS q1
|
||
JOIN devices d ON q1.device_id = d.id
|
||
JOIN users u ON d.user_id = u.id
|
||
JOIN members m ON u.member_id = m.id AND m.id <> 1
|
||
GROUP BY m.id
|
||
) AS q2
|
||
JOIN users u ON q2.id = u.member_id
|
||
JOIN devices d ON u.id = d.user_id
|
||
JOIN ifaces i ON d.id = i.device_id
|
||
LEFT JOIN ip_addresses ip ON i.id = ip.iface_id
|
||
LEFT JOIN vlan_ifaces vi ON i.id = vi.iface_id
|
||
LEFT JOIN ip_addresses ip2 ON vi.id = ip2.vlan_iface_id
|
||
) AS q3
|
||
WHERE q3.ip_address IS NOT NULL
|
||
ORDER BY download DESC
|
||
SELECT member_id FROM members_traffics
|
||
WHERE active = 1
|
||
) AS t
|
||
JOIN users u ON u.member_id = t.member_id
|
||
JOIN devices d ON d.user_id = u.id
|
||
LEFT JOIN ifaces i ON i.device_id = d.id
|
||
LEFT JOIN vlan_ifaces vi ON vi.iface_id = i.id
|
||
LEFT JOIN ip_addresses ip ON ip.iface_id = i.id
|
||
LEFT JOIN ip_addresses vip ON vip.vlan_iface_id = vi.id
|
||
WHERE ip.ip_address IS NOT NULL OR vip.ip_address IS NOT NULL
|
||
");
|
||
|
||
foreach ($ips as $ip)
|
freenetis/branches/ulogd/application/controllers/scheduler.php | ||
---|---|---|
//receive SMS
|
||
self::receive_sms();
|
||
|
||
// cleans ulogd's table
|
||
self::clean_ulogd();
|
||
// update ulogd
|
||
self::update_ulogd();
|
||
|
||
}
|
||
|
||
... | ... | |
}
|
||
|
||
/**
|
||
* Cleans (truncates) ulogd's table
|
||
* Update ulogd
|
||
* @author Michal Kliment
|
||
*/
|
||
private static function clean_ulogd()
|
||
function update_ulogd()
|
||
{
|
||
// finds last time of cleaning
|
||
$last_clean_ulogd = (Settings::get('last_clean_ulogd')!='') ? Settings::get('last_clean_ulogd') : 0;
|
||
|
||
// it's time to clean :-)
|
||
if ($last_clean_ulogd + Settings::get('clean_ulogd_interval') < time())
|
||
// it's time to update
|
||
if (Settings::get('ulogd_update_last') + Settings::get('ulogd_update_interval') < time())
|
||
{
|
||
$db = new Database();
|
||
$db->query("TRUNCATE TABLE `ulog2_ct`");
|
||
|
||
$db->query("TRUNCATE ip_addresses_traffics;");
|
||
|
||
$db->query("
|
||
INSERT INTO ip_addresses_traffics
|
||
SELECT ip2str(orig_ip_saddr) AS ip_address, SUM(orig_raw_pktlen/1024) AS upload, SUM(reply_raw_pktlen/1024) AS download
|
||
FROM ulog2_ct
|
||
GROUP BY orig_ip_saddr;
|
||
");
|
||
|
||
$db->query("TRUNCATE ulog2_ct;");
|
||
|
||
$db->query("TRUNCATE members_traffics;");
|
||
|
||
$db->query("
|
||
INSERT INTO members_traffics
|
||
SELECT u.member_id, SUM(q.upload) AS upload, SUM(q.download) AS download, 0 AS active FROM
|
||
(
|
||
SELECT t.*, IFNULL(i.device_id,i2.device_id) AS device_id FROM ip_addresses_traffics t
|
||
JOIN ip_addresses ip ON t.ip_address = ip.ip_address
|
||
LEFT JOIN ifaces i ON ip.iface_id = i.id
|
||
LEFT JOIN vlan_ifaces vi ON ip.vlan_iface_id = vi.id
|
||
LEFT JOIN ifaces i2 ON vi.iface_id = i2.id
|
||
) AS q
|
||
JOIN devices d ON q.device_id = d.id
|
||
JOIN users u ON d.user_id = u.id
|
||
GROUP BY u.member_id;
|
||
");
|
||
|
||
$ulogd_active_count = Settings::get('ulogd_active_count');
|
||
|
||
if (substr($ulogd_active_count,-1) == "%")
|
||
{
|
||
$member_model = new Member_Model();
|
||
$total = $member_model->count_all_members_to_ulogd();
|
||
|
||
$ulogd_active_count = round(((int) substr($ulogd_active_count,0,-1)) / 100 * $total);
|
||
}
|
||
|
||
$db->query("
|
||
UPDATE members_traffics
|
||
SET active = 1
|
||
WHERE member_id IN
|
||
(
|
||
SELECT alias.member_id FROM
|
||
(
|
||
SELECT t.member_id, (download+upload) AS total FROM members_traffics t
|
||
JOIN members m ON t.member_id = m.id AND (m.qos_rate IS NULL OR m.qos_rate = 0)
|
||
ORDER BY ".Settings::get('ulogd_active_type')." DESC LIMIT 0,$ulogd_active_count
|
||
) alias
|
||
)
|
||
");
|
||
|
||
$db->query("
|
||
UPDATE members_traffics t, members_traffics_daily d
|
||
SET d.upload = d.upload + t.upload, d.download = d.download + t.download
|
||
WHERE t.member_id = d.member_id AND d.day = '".date('Y-m-d')."';
|
||
");
|
||
|
||
$db->query("
|
||
INSERT INTO members_traffics_daily
|
||
SELECT t.member_id, t.upload, t.download, '".date('Y-m-d')."' AS day FROM members_traffics t
|
||
LEFT JOIN members_traffics_daily d ON t.member_id = d.member_id AND d.day = '".date('Y-m-d')."'
|
||
WHERE d.member_id IS NULL;
|
||
");
|
||
|
||
// updates variable
|
||
Settings::set('last_clean_ulogd', time());
|
||
Settings::set('ulogd_update_last', time());
|
||
}
|
||
}
|
||
}
|
freenetis/branches/ulogd/application/controllers/settings.php | ||
---|---|---|
if (!$this->acl_check_edit(get_class($this),'system'))
|
||
Controller::error(ACCESS);
|
||
|
||
$additional_info = 'ulogd - '.url_lang::lang('texts.last update').': '.strftime("%Y/%m/%d %T", Settings::get('ulogd_update_last')).', <span';
|
||
|
||
if (Settings::get('ulogd_update_last')+Settings::get('ulogd_update_interval') < time())
|
||
$additional_info .= ' style="color:red"';
|
||
|
||
$additional_info .= '>'.url_lang::lang('texts.next update').': '.strftime('%Y/%m/%d %T', Settings::get('ulogd_update_last')+Settings::get('ulogd_update_interval')).'</span>';
|
||
|
||
// creating of new forge
|
||
$this->form = new Forge(NULL, '', 'POST', array('id' => 'article_form'));
|
||
$this->form->set_attr('class', 'form_class')->set_attr('method', 'post');
|
||
$this->form->group('')->label(url_lang::lang('texts.Centralized logging'));
|
||
$this->form->dropdown('clog_driver')->label(url_lang::lang('texts.Driver').':')->options(array(NULL => url_lang::lang('texts.Inactive'), 'ulogd' => 'ulogd'))->selected($this->settings->get('clog_driver'));
|
||
$this->form->input('clog_hostname')->label(url_lang::lang('texts.Hostname').':')->value($this->settings->get('clog_hostname'));
|
||
$this->form->input('clog_username')->label(url_lang::lang('texts.User name').':')->value($this->settings->get('clog_username'));
|
||
$this->form->input('clog_password')->label(url_lang::lang('texts.Password').':')->value($this->settings->get('clog_password'));
|
||
$this->form->input('clog_database')->label(url_lang::lang('texts.Database name').':')->value($this->settings->get('clog_database'));
|
||
$this->form->input('clog_table')->label(url_lang::lang('texts.Table name').':')->value($this->settings->get('clog_table'));
|
||
$this->form->group('')->label('ulogd '.help::hint('ulogd'))->message();
|
||
$this->form->input('ulogd_update_interval')->label(url_lang::lang('texts.Interval of update').':')->rules('required|valid_numeric')->value($this->settings->get('ulogd_update_interval'))->help(help::hint('ulogd_update_interval'));
|
||
$this->form->group('')->label(url_lang::lang('texts.Active members').' '.help::hint('ulogd_active'));
|
||
$this->form->input('ulogd_active_count')->label(url_lang::lang('texts.Count of active members').':')->rules('required|valid_ulogd_active_count')->value($this->settings->get('ulogd_active_count'))->help(help::hint('ulogd_active_count'));
|
||
$this->form->dropdown('ulogd_active_type')->label(url_lang::lang('texts.Type of traffic').':')->rules('required')->options(array(0 => '----- '.url_lang::lang('texts.Select type').' -----', 'upload' => url_lang::lang('texts.upload'), 'download' => url_lang::lang('texts.download'),'total' => url_lang::lang('texts.both').' ('.url_lang::lang('texts.upload').' + '.url_lang::lang('texts.download').')'))->selected($this->settings->get('ulogd_active_type'))->help(help::hint('ulogd_active_type'));
|
||
$this->form->submit('submit')->value(url_lang::lang('texts.Save'));
|
||
special::required_forge_style($this->form, ' *', 'required');
|
||
// form validate
|
||
... | ... | |
|
||
$view->title = url_lang::lang('texts.Settings').' - '.url_lang::lang('texts.logging');
|
||
$view->content = new View('settings');
|
||
|
||
$view->content->additional_info = $additional_info;
|
||
|
||
$view->content->current = 'logging';
|
||
$view->content->content = $this->form->html();
|
||
$view->content->headline = url_lang::lang('texts.Logging');
|
freenetis/branches/ulogd/application/libraries/Settings.php | ||
---|---|---|
private static $email_port = 25;
|
||
|
||
// ulogd settings
|
||
private static $clean_ulogd_interval = 1800;
|
||
|
||
// time of last update of ulogd
|
||
private static $ulogd_update_last = 0;
|
||
|
||
// interval of updating of ulogd (in seconds), default 1800s = 30 minutes
|
||
private static $ulogd_update_interval = 1800;
|
||
|
||
// count of the most traffic-active members to find, default 10% of members
|
||
private static $ulogd_active_count = '10%';
|
||
|
||
// type of traffic of members to find, default download traffic
|
||
private static $ulogd_active_type = 'download';
|
||
|
||
/**
|
||
* @author Michal Kliment
|
||
* Function to get value from settings by given key
|
freenetis/branches/ulogd/application/views/main.php | ||
---|---|---|
return value.match(/^([a-zA-Z0-9]+)((\-|_|\.)([a-zA-Z0-9]+))*@([a-zA-Z0-9]+)((\-|_)([a-zA-Z0-9]+))*(\.[a-z]+)+$/);
|
||
}, '<?php echo url_lang::lang('texts.Bad jabber format.') ?>');
|
||
|
||
$.validator.addMethod('ulogd_active_count', function(value) {
|
||
return value.match(/^[0-9]+(\.[0-9]+)?%?$/);
|
||
}, '<?php echo url_lang::lang('texts.Bad format.') ?>');
|
||
|
||
$('#ip_address').keyup(function(){
|
||
// test if ip address is complete and valid
|
||
var complete = this.value.match(/^((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])\.((25[0-5])|(2[0-4][0-9])|(1[0-9][0-9])|([1-9][0-9])|[0-9])$/);
|
freenetis/branches/ulogd/application/views/settings.php | ||
---|---|---|
<h3 class="clear"><?php echo $headline ?></h3>
|
||
<br />
|
||
<?php echo $content ?>
|
||
|
||
<?php echo (isset($additional_info) && $additional_info!='') ? '<br /><br /><b>'.$additional_info.'</b>' : '' ?>
|
Také k dispozici: Unified diff
Napsany dobre optimalizovane SQL prikazy, ktere zpracovavaji data z ulogd. Do Nastaveni pridana sekce Logovani, kde se ulogd nastavuje. Zbyva dopsat gridy pro prihlizeni ziskanych dat.