This commit is contained in:
biosvos
2026-08-07 17:38:18 +09:00
commit 873193a243
9613 changed files with 2755992 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
Revision 1054
-------------------
수정일 : 2014-08-07
수정자 : 유희곤
신규 적용시 발생한 문제점 수정
- CHG: php 실행시 지시어 관련 문제 수정
- status-save.php 에서
- <? 로 시작시 php 가 제대로 동작 안함
- 이에 <?php 로 수정 처리
- 이와 더불어 문제가 될 수 있는 <? 관련 주석 코드 제거
- CHG: status-save.sh fileformat 변경
- dos format 으로 저장되어 있어 Linux 장비에서 ^M 으로 인한 스크립트 수행 불가
- 이에 unix format 으로 변경 처리
- CHG: ReadMe.txt 작업 절차 수정
- 잘못된 작업 절차 수정 처리
Revision 0906
-------------------
수정일 : 2013-11-15
수정자 : 정기욱
- CHG: status-save.php 를 패키지화 가능하도록 수정(설정값에 ## 추가)
Revision 0903
-------------------
수정일 : 2013-10-24
수정자 : 정기욱
- CHG: 불필요 주석 삭제
- CHG: ReadMe.txt, Changelog.txt 추가
Revision 0892
-------------------
수정일 : 2013-10-07
수정자 : 정기욱
- NEW: SVN 신규 등록
- rc_gcmd 소스 등록
+160
View File
@@ -0,0 +1,160 @@
status-save.php
=============================================
-------------------
작성일 : 2013-10-22
작성자 : 정기욱
2014-08-07 유희곤 내역 수정
-------------------
Contents
========
- 개요
- 설치 절차
- 알려진 문제
개요
========
status-save.php는 CCDB의 DBMS 인 Oracle 과 PPAS(PostgreSQL) 연동 버전으로 나뉜다.
Oracle 연동 버전은 KT의 PPAS 도입 이전에 사용하던 버전으로 이 문서에는 그에 대한 자세한 설명은 생락하고
PPAS 연동 버전에 대해서만 기술한다.
status-save.php는 GMS에 기록된 각 RC의 스토리지 용량, 사용량, 네트워크 정보, FHS 수량 등을 CCDB에 저장하는 기능을 가진다.
이렇게 저장된 정보는 SMS를 통해서 RC 통계로 사용된다.
설치는 아래에 기록한 '설치 절차'를 따라 GTS서버에 설치하여야 한다.
설치 절차
=========
status-save.sh 에 포함된 php 스크립트 구동을 위해 서버에 PHP 관련 패키지를 설치한다.
1. PHP, PostgreSQL 연동 패키지 설치
# yum install php php-pgsql
2. PHP 버전 확인(PHP 스크립트 기동에 오류가 있는 경우 참고한다.)
# php -version
PHP 5.3.3 (cli) (built: Jul 12 2013 20:35:47)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
3. PostgreSQL 연동 환경 점검
# vi phpinfo.php
<?php
phpinfo();
?>
# php phpinfo.php 를 수행해서 다음과 같은 결과가 나타나야 한다.
~ 생략 ~
PDO
PDO support => enabled
PDO drivers => pgsql, sqlite
pdo_pgsql
PDO Driver for PostgreSQL => enabled
PostgreSQL(libpq) Version => 8.4.13
Module version => 1.0.2
Revision => $Id: pdo_pgsql.c 300351 2010-06-10 12:11:19Z iliaa $
pdo_sqlite
PDO Driver for SQLite 3.x => enabled
SQLite Library => 3.6.20
pgsql
PostgreSQL Support => enabled
PostgreSQL(libpq) Version => 8.4.13
Multibyte character support => enabled
SSL support => enabled
Active Persistent Links => 0
Active Links => 0
Directive => Local Value => Master Value
pgsql.allow_persistent => On => On
pgsql.auto_reset_persistent => Off => Off
pgsql.ignore_notice => Off => Off
pgsql.log_notice => Off => Off
pgsql.max_links => Unlimited => Unlimited
pgsql.max_persistent => Unlimited => Unlimited
~ 생략 ~
5. status-save.sh 와 status-save.php 를 /user/service/bin 디렉토리 하위에 복사
6. status-save.php 스크립트 설정
아래에 기록한 CCDB와 GMS 연동에 필요한 각 파라미터들을 입력한다.
CCDB_NAME
CCDB_USER
CCDB_PASSWD
CCDB_VIP
CCDB_PORT
GMS_IP
GMS_STATUS_PORT #GMS에서 구동중인 new_sh_statusd의 UDP port 번호
CC_NODE_NAME
# vi /user/service/bin/status-save.php
예제)
~ 생략 ~
$db_handle = pg_connect("dbname=cs_ccdb user=solbox password=solbox host=10.10.10.10 port=5432");
$server_addr[0][0] = "222.122.136.110";
$server_addr[0][1] = "30001";
$server_addr[0][2] = "KT-IDC";
~ 생략 ~
7. status-save.sh 에 실행 속성을 부여한다.
# chmod +x /user/service/bin/status-save.sh
8. 5분 단위 자동 수행 설정
# vi /etc/crontab
~ 생략 ~
#
# Status Save Script
#
*/5 * * * * root /user/service/bin/status-save.sh >/dev/null
9. GMS 서버 연동 환경 점검
# nmap -sU -p 30001 222.122.136.110
Starting Nmap 5.51 ( http://nmap.org ) at 2013-08-06 16:51 KST
Nmap scan report for 222.122.136.110
Host is up (0.00037s latency).
PORT STATE SERVICE
30001/udp open unknown
알려진 문제
===========
+348
View File
@@ -0,0 +1,348 @@
<?php
/* STATUS SAVER
CODING TAB SPACE = 4 ( set ts=4 )
*/
$db_handle = pg_connect("dbname=##CCDB_NAME## user=##CCDB_USER## password=##CCDB_PASSWD## host=##CCDB_VIP## port=##CCDB_PORT##"); // Written by redeye
$server_addr[0][0] = "##GMS_IP##"; // Written by redeye
$server_addr[0][1] = "##GMS_STATUS_PORT##"; // Written by redeye
$server_addr[0][2] = "##CC_NODE_NAME##"; // Written by redeye
$tot = count($server_addr);
for($i=0; $i < $tot; $i++){
//if($i%3 == 0) echo "<table align=\"center\"><tr>";
$fp = @fsockopen("udp://{$server_addr[$i][0]}", $server_addr[$i][1], $errno, $errstr);
$test2 = ""; // Written by redeye
$test = ""; // Written by redeye
if (!$fp) {
echo "ERROR: $errno - $errstr<br>\n";
continue;
} else {
fwrite($fp,"GET_SERVSTATUS", 15);
while(1) {
$test2 = fread($fp, 2048);
$test .= trim($test2);
$j = strlen($test2);
if($j < 1024) break;
}
fclose($fp);
}
//echo "<!-- TEST : $test -->";
$pt = new parsePipe();
$test = $pt->nullTrim($test);
$tmpArr = $pt->textArr($test);
$serviceName = $pt->serviceName($test);
//$result = $pt->parseIt($tmpArr[$serviceType]);
//$tot_tr = $pt->countIt();
for($k=0; $k<sizeof($serviceName); $k++)
{
$rcid = $serviceName[$k][0];
//if($rcid == "time" || $rcid == "rcid_err") continue;
if($rcid == "TIME" || $rcid == "rcid_err") continue;
$result = $pt->parseIt($tmpArr[$k]);
$tot_tr = $pt->countIt();
$totalDisk = 0;
$freeDisk = 0;
$usedDisk = 0;
$totalTrafficINB = 0;
$totalPacketsINB = 0;
$totalTrafficOUTB = 0;
$totalPacketsOUTB = 0;
$totalConnEstab = 0;
$totalConnAll = 0;
$totalRTSCount = 0;
$totalRCTSCount = 0;
$totalLBCount = 0;
$totalRCDBCount = 0;
$activeRTSCount = 0;
$activeRCTSCount = 0;
$activeLBCount = 0;
$activeRCDBCount = 0;
for($j=0; $j<$tot_tr; $j++)
{
//print_r($result[$j]);
$totalDisk += $result[$j][8];
$freeDisk += $result[$j][9];
$usedDisk += ($result[$j][8] - $result[$j][9]);
/* Packets INB */
if ($result[$j][16] != '-') {
$totalPacketsINB += $result[$j][16];
}
/* Traffic INB */
if ($result[$j][17] != '-') {
$totalTrafficINB += $result[$j][17];
}
/* Packets OUTB */
if ($result[$j][18] != '-') {
$totalPacketsOUTB += $result[$j][18];
}
/* Traffic OUTB */
if ($result[$j][19] != '-') {
$totalTrafficOUTB += $result[$j][19];
}
/* Connection Estblished */
if ($result[$j][14] != '-') {
$totalConnEstab += $result[$j][14];
}
/* Connection All */
if ($result[$j][15] != '-') {
$totalConnAll += $result[$j][15];
}
/* Servers Total/Active */
switch($result[$j][1])
{
//case "1":
case "2":
$totalRTSCount += 1;
if( $result[$j][0] == "1") $activeRTSCount +=1;
break;
//case "4":
case "3":
$totalRCTSCount += 1;
if( $result[$j][0] == "1") $activeRCTSCount +=1;
break;
//case "6":
case "4":
$strTemp = explode("_", $result[$j][2]);
if( substr($strTemp[count($strTemp)-1], 0, 4) == "PGLB" || substr($strTemp[count($strTemp)-1], 0, 4) == "DBLB")
{
$totalLBCount += 1;
if( $result[$j][0] == "1") $activeLBCount +=1;
}
else if( substr($strTemp[count($strTemp)-1], 0, 2) == "DB" || substr($strTemp[count($strTemp)-1], 0, 4) == "RCDB")
{
$totalRCDBCount += 1;
if( $result[$j][0] == "1") $activeRCDBCount +=1;
}
else
{
echo"ERR";
}
break;
default:
}
}
?>
<?php
//$totalDisk = floor($totalDisk / 1024);
//$freeDisk = floor($freeDisk / 1024);
//$usedDisk = floor($usedDisk / 1024);
//$totalTrafficINB = floor($totalTrafficINB / 1024);
//$totalPacketsINB = floor($totalPacketsINB / 1024);
$query = "INSERT INTO cs_stat.cs_stat_rc(
id, stg_total, stg_used, net_in, net_out, fhs_total,
fhs_active, rcts_total, rcts_active, dblb_total, dblb_active,
rcdb_total, rcdb_active)
VALUES ('$rcid', '$totalDisk', '$usedDisk', '$totalTrafficINB', '$totalTrafficOUTB', '$totalRTSCount',
'$activeRTSCount', '$totalRCTSCount', '$activeRCTSCount', '$totalLBCount', '$activeLBCount',
'$totalRCDBCount', '$activeRCDBCount')"; // Written by redeye
//echo "$strSql";
// Eliminate abnormal large number.
if($totalDisk < 10000000000000000 && $totalTrafficINB < 30000000000 && $totalTrafficOUTB < 30000000000)
$result_pgsql = pg_exec($db_handle, $query); // Written by redeye
}
pg_close($db_handle); // Written by redeye
}
########
#CLASSES
########
class parsePipe {
var $tot_line;
function parseIt($givenText){
$cnt = 0;
$minValue = 0;
$maxValue = 0;
$minLevel = 1000;
$tmp_arr = array();
$temp_arr = explode("\r\n", $givenText);
$i = ""; // Written by redeye
$result_arr[$i][9] = "";
$this->tot_line = count($temp_arr) == 1 ? 0 : count($temp_arr) - 1;
for($i=0; $i < $this->tot_line; $i++){
if($temp_arr[$i]!='') {
$result_arr[$i] = explode("|", $temp_arr[$i]);
$result_arr[$i][20] = "";
$tmp_arr[$i] = ($result_arr[$i][9] == '' || $result_arr[$i][9] == '-') ? 0 : $this->nullTrim($result_arr[$i][9]);
$result_arr[$i][8] = $this->nullTrim($result_arr[$i][8]);
$result_arr[$i][9] = $this->nullTrim($result_arr[$i][9]);
$result_arr[$i][10] = $this->nullTrim($result_arr[$i][10]);
/*
if($result_arr[$i][9] != '-' && $result_arr[$i] != '' && $result_arr[$i] != 0) {
if($cnt == 0) {
$minValue = $result_arr[$i][9];
$cnt++;
}
if($minValue > $result_arr[$i][9]) {
$minValue = $result_arr[$i][9];
}
}
*/
if ($result_arr[$i][11] != '-' && $result_arr[$i] != '' && $result_arr[$i] != 0) {
if ($minLevel > $result_arr[$i][11]) {
$minLevel = $result_arr[$i][11];
}
}
}
}
$tot_tr = ""; // Written by redeye
for ($i = 0; $i < $tot_tr; $i++) {
if ($result_arr[$i][11] != '-' && $result_arr[$i] != '' && $result_arr[$i] != 0 && $result_arr[$i][11] <= $minLevel) {
if($result_arr[$i][9] != '-' && $result_arr[$i] != '' && $result_arr[$i] != 0) {
if($cnt == 0) {
$minValue = $result_arr[$i][9];
$cnt++;
}
if($minValue > $result_arr[$i][9]) {
$minValue = $result_arr[$i][9];
}
}
}
}
//echo "minLevel $minLevel minValue $minValue<br>";
$cnt = 0;
arsort($tmp_arr);
reset($tmp_arr);
while (list ($key, $val) = each ($tmp_arr)) {
//echo "$key = $val<br>";
if($val != 0) {
if($cnt == 0) {
if ($minLevel < $result_arr[$key][11] ||
$result_arr[$key][10] > 0) {
$result_arr[$key][20] = "yellow";//$maxValue;
} else {
//echo "11 ".$result_arr[$key][11]." 10 ".$result_arr[$key][10]."<br>";
$maxValue = $val;
$result_arr[$key][20] = "99FFFF";
$cnt++;
}
} else {
//if($minValue == $val) {
if($val < (2 * 1024 * 1024 * 1024 * 10)) {
$result_arr[$key][20] = "red";
} else if(($maxValue - $val) < (1024 * 1024 * 1024) &&
$minLevel == $result_arr[$key][11]) {
//echo "1GB Highed<br>";
//echo "minLevel $minLevel maxValue $maxValue<br>";
$result_arr[$key][20] = "99FFFF";
} else {
//echo "1GB Lowed<br>";
$result_arr[$key][20] = "yellow";//$maxValue;
}
}
} else {
$result_arr[$key][20] = "white";
}
}
return $result_arr;
}
function countIt(){
return $this->tot_line;
}
function nullTrim($tmp_str)
{
$return_str = "";
$maxLength = strlen($tmp_str);
for($i=0 ; $i < $maxLength ; $i++) {
if(ord(substr($tmp_str, $i, 1)) != 0 || $tmp_str != " ") {
$return_str .= substr($tmp_str, $i, 1);
}
}
return $return_str;
}
function textArr($text)
{
$cnt = -1;
$tmp_cnt = 0;
$str_arr = array();
$tmp_search_str = "";
$temp_arr = explode("\r\n", $text);
for($i=0; $i<sizeof($temp_arr); $i++) {
$split_str = explode("|", $temp_arr[$i]);
$search_str = explode("_", $split_str[2]);
if($tmp_search_str != $search_str[0]) {
$tmp_search_str = $search_str[0];
//$str_arr[$cnt][30] = $search_str[0];
//echo $str_arr[$cnt][0]."<br>".$tmp_search_str."->".$cnt."<-"."<br>";
$cnt++;
}
$str_arr[] = array(); // Written by redeye
$str_arr[$cnt] .= $temp_arr[$i]."\r\n";
}
return $str_arr;
}
function serviceName($text)
{
$cnt = -1;
$tmp_cnt = 0;
$str_arr = array();
$tmp_search_str = "";
$temp_arr = explode("\r\n", $text);
for($i=0; $i<sizeof($temp_arr); $i++) {
$split_str = explode("|", $temp_arr[$i]);
$search_str = explode("_", $split_str[2]);
//echo $split_str[0]."<br>";
if($tmp_search_str != $search_str[0]) {
$tmp_search_str = $search_str[0];
$cnt++;
}
$str_arr[$cnt][0] = $tmp_search_str;
if($split_str[0] == 2) {
$str_arr[$cnt][1] = "dead";
}
// $str_arr[4][1] = "dead";
// $str_arr[1][1] = "dead";
}
return $str_arr;
}
function tailer($name)
{
$temp_arr = explode("_", $name);
$temp_arr2 = substr($name, strlen($temp_arr[0]) + 1, strlen($name));
return $temp_arr2;
}
function noYear($date)
{
$date = substr($date, 5, 14);
return $date;
}
}
?>
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
/usr/bin/php /user/service/bin/status-save.php >/dev/null