Cisco Service Control Management Suite Collection Manager ユーザ ガイド
コード サンプル
コード サンプル
発行日;2012/02/03 | 英語版ドキュメント(2011/02/23 版) | ドキュメントご利用ガイド | ダウンロード ; この章pdf , ドキュメント全体pdf (PDF - 2MB) | フィードバック

目次

コード サンプル

アプリケーションの設定

tables.xml ファイル

tables.dtd ファイル

アダプタの設定

ragadapter.conf ファイル

ragadapter.xml ファイル

コード サンプル

この付録は、Cisco Service Control Management Suite(SCMS)Collection Manager(CM)および CM が受信するデータを処理するアダプタの設定に使用するファイルのサンプルで構成されています。

「アプリケーションの設定」

「アダプタの設定」

アプリケーションの設定

次のセクションでは、データベース テーブルを設定するのに使用する XML ファイル( tables.xml )の一部と、XML ファイルの構造を確認するのに使用される DTD ファイルをリスト表示しています。

「tables.xml ファイル」

「tables.dtd ファイル」

tables.xml ファイル

次に、Cisco Service Control Application for Broadband tables.xml ファイルの一部をリスト表示します。

<?xml version="1.0" encoding="ISO8859_1"?>
<!DOCTYPE dbtabconf PUBLIC "-//P-Cube//Engage DB RDR Configuration 2.1.0//EN" "dbtables.dtd">
<dbtabconf>
<fileversion>
...
</fileversion>
<application name="Engage" version="2.1"/>
<dbtables>
<rdr name="SUR" dbtabname="RPT_SUR" tag="4042321922" createtable="true">
<fields>
<field id="1" name="TIME_STAMP" type="TIMESTAMP">
<options>
<option property="source" value="timestamp"/>
</options>
</field>
<field id="2" name="RECORD_SOURCE" type="INT32">
<options>
<option property="source" value="recordsource"/>
</options>
</field>
<field id="3" name="SUBSCRIBER_ID" type="STRING" size="64"/>
<field id="4" name="PACKAGE_ID" type="INT32"/>
<field id="5" name="SERVICE_ID" type="INT32">
<options>
<option property="notnull" value="true"/>
</options>
</field>
<field id="6" name="MONITORED_OBJECT_ID" type="INT32"/>
<field id="7" name="BREACH_STATE" type="INT32"/>
<field id="8" name="REASON" type="INT32"/>
<field id="9" name="CONFIGURED_DURATION" type="INT32"/>
<field id="10" name="DURATION" type="INT32"/>
<field id="11" name="END_TIME" type="INT32"/>
<field id="12" name="UPSTREAM_VOLUME" type="UINT32"/>
<field id="13" name="DOWNSTREAM_VOLUME" type="UINT32"/>
<field id="14" name="SESSIONS" type="UINT32"/>
</fields>
<indexes>
<index name="RPT_SUR_I1" columns="END_TIME">
<options>
<option property="clustered" value="true"/>
</options>
</index>
</indexes>
</rdr>
<rdr name="LUR" dbtabname="RPT_LUR" tag="4042321925" createtable="true">
<fields>
<field id="1" name="TIME_STAMP" type="TIMESTAMP">
<options>
<option property="source" value="timestamp"/>
</options>
</field>
<field id="2" name="RECORD_SOURCE" type="INT32">
<options>
<option property="source" value="recordsource"/>
</options>
</field>
<field id="3" name="LINK_ID" type="INT32"/>
<field id="4" name="GENERATOR_ID" type="INT32"/>
<field id="5" name="SERVICE_ID" type="INT32"/>
<field id="6" name="CONFIGURED_DURATION" type="INT32"/>
<field id="7" name="DURATION" type="INT32"/>
<field id="8" name="END_TIME" type="INT32"/>
<field id="9" name="UPSTREAM_VOLUME" type="UINT32"/>
<field id="10" name="DOWNSTREAM_VOLUME" type="UINT32"/>
<field id="11" name="SESSIONS" type="UINT32"/>
</fields>
<indexes>
<index name="RPT_LUR_I1" columns="END_TIME">
<options>
<option property="clustered" value="true"/>
<option property="allowduprow" value="true"/>
</options>
</index>
</indexes>
</rdr>
<aggtable name="TOP_HOURLY" dbtabname="RPT_TOPS_PERIOD0" aggperiod="0">
<fields>
<field id="1" name="RECORD_SOURCE" type="INT32"/>
<field id="2" name="METRIC_ID" type="INT8"/>
<field id="3" name="SERVICE_ID" type="INT8"/>
<field id="4" name="TIME_STAMP" type="TIMESTAMP"/>
<field id="5" name="AGG_PERIOD" type="INT8"/>
<field id="6" name="SUBSCRIBER_ID" type="STRING" size="64"/>
<field id="7" name="CONSUMPTION" type="UINT32"/>
</fields>
<indexes>
<index name="RPT_TOPS_PERIOD0_I1" columns="TIME_STAMP">
<options>
<option property="clustered" value="true"/>
<option property="allowduprow" value="true"/>
</options>
</index>
</indexes>
</aggtable>
<table name="TZ" dbtabname="JCONF_SE_TZ_OFFSET">
<fields>
<field id="1" name="TIME_STAMP" type="TIMESTAMP"/>
<field id="2" name="OFFSET_MIN" type="INT16"/>
</fields>
</table>
</dbtables>
</dbtabconf>

テーブル(RDR テーブル、集計テーブル、または追加テーブル)ごとに、フィールド、インデックスなどがリスト表示されます。


) テーブル、インデックス、またはフィールドには、テンプレートからアクセスできる任意のフリー テキスト オプションを設定できます。


XML ファイルは実行時に、次のセクションで再生成される単純な DTD に対して検証されます。

tables.dtd ファイル

次に、 tables.xml 定義ファイルを検証するために使用する DTD ファイルを示します。

<?xml version="1.0" encoding="ISO8859_1"?>
 
<!ELEMENT dbtabconf (fileversion, application, db?, dbtables)>
<!ELEMENT fileversion (#PCDATA)>
<!ELEMENT application EMPTY>
<!ATTLIST application
name CDATA #REQUIRED
version CDATA #REQUIRED
>
<!ELEMENT db (options)>
<!ELEMENT dbtables (rdr*, aggtable*, table*)>
<!ELEMENT table (options?, fields, indexes?)>
<!ATTLIST table
name CDATA #REQUIRED
dbtabname CDATA #REQUIRED
createtable (true | false) "true"
inserttodb (true | false) "false"
>
<!ELEMENT aggtable (options?, fields, indexes?)>
<!ATTLIST aggtable
name CDATA #REQUIRED
dbtabname CDATA #REQUIRED
aggperiod CDATA #REQUIRED
createtable (true | false) "true"
>
<!ELEMENT rdr (options?, fields, indexes?)>
<!ATTLIST rdr
name CDATA #REQUIRED
dbtabname CDATA #REQUIRED
tag CDATA #REQUIRED
createtable (true | false) "true"
inserttodb (true | false) "true"
>
<!ELEMENT fields (field+)>
<!ELEMENT field (options?)>
<!-- the id attribute below is presumably a numeric index, but it is for future
use, we currently don't look at it, as the order is imposed in the XML -->
<!ATTLIST field
id CDATA #REQUIRED
name CDATA #REQUIRED
type CDATA #REQUIRED
size CDATA #IMPLIED
>
<!ELEMENT indexes (index+)>
<!ELEMENT index (options?)>
<!ATTLIST index
name CDATA #REQUIRED
columns CDATA #REQUIRED
create (true | false) "true"
>
<!ELEMENT options (option+)>
<!ELEMENT option EMPTY>
<!ATTLIST option
property CDATA #REQUIRED
value CDATA #REQUIRED
>

DTD および XML ファイルの場所および名前は、アダプタのコンフィギュレーション ファイル内でアダプタごとに個別に設定できます。

アダプタの設定

次のセクションでは、Real-Time Aggregation(RAG)アダプタの設定に使用するコンフィギュレーション ファイル( ragadapter.conf )および関連 XML ファイル( ragadapter.xml )をリスト表示します。

他のアダプタのコンフィギュレーション ファイルは、RAG アダプタ コンフィギュレーション ファイルと類似しています。RAG アダプタにだけ関連 XML ファイルがあります。

「ragadapter.conf ファイル」

「ragadapter.xml ファイル」

ragadapter.conf ファイル

RAG アダプタの一般的なメンテナンスでは、 ~scmscm/cm/config/ragadapter.conf ファイルを使用します。次に、RAG アダプタ コンフィギュレーション ファイルのサンプルを示します。

#
# RAGAdapter main configuration file
#
[config]
xml_filename = ~/cm/config/ragadapter.xml
[housekeeper]
interval_sec = 10
[db]
operations_timeout = 60
batch_size = 10
transaction_size = 15
commit_interval = 6
blocking_connects = true
db_template_file = main.vm
db_template_dir = dbpacks/sybase/ase12.5.1
[app]
app_conf_file = dbtables.xml
app_dtd_file = dbtables.dtd
app_conf_dir = apps/scasbb/3.5.0

ragadapter.xml ファイル

次にリスト表示されているサンプル ragadapter.xml ファイルでは、着信 NUR RDR( intag="4042321920" )に対する 2 つの集約を定義します。

1. RDR タグ 71070 の RDR( outtag="71070" )を集約し、CSV ファイル( sinkid="csv1" )に出力します。

CSV ファイル定義は <csvsink id="csv1"> タグの下の <sinks> セクションにあります。このセクションでは、出力ファイル名とディレクトリを定義します。また、新しいファイルを開く頻度も定義します(5 分間隔、または現在のファイルが 1,000 行に達した場合)。ファイルの各フィールドは、引用符( " )で括ります。

バケットは 2 つの NUR フィールド(0 および 2)ごとにデータを集約します。これらのフィールドは SUBSCRIBER_ID および SUBS_USG_CNT_ID に対応します。バケット ID は SQL 文の「GROUP BY」句に指定されるフィールドに類似しています。

この 2 つのフィールドには 2 つのクロージャが定義されています。フィールドが 0 で、SUBSCRIBER_ID が RonK、OmerT、GuyM のいずれかの場合、GuyM として報告されます。SUBSCRIBER_ID が NimrodR、YossiO、LironL のいずれかの場合、OdedE として報告されます。フィールドが 2 で、SUBS_USG_CNT_ID が 5、6、7 のいずれかの場合、15 として報告されます。この機能は Oracle SQL の「DECODE」関数に類似しています。

フィールド 8、9、10(上、下、セッションに対応)は、バケット内部に蓄積されます。

次に 4 つのモニタを定義します。

2 つの <maxmonitor> モニタは、フィールド 8(上)およびフィールド 9(下)のチェックポイントとして定義されます。これらのフィールドに蓄積されたいずれかの値が 10,000 に達すると、バケットは CSV ファイルにフラッシュされます。

3 つ目の <timeoutmonitor> モニタは、すべてのバケットを 60 秒ごとにファイルにフラッシュするためのチェックポイントです。

4 つ目の <changemonitor> モニタは、DURATION(フィールド 6)の新しい値を含む RDR が到着するときに、RAG アダプタ ログとユーザ ログの両方に対して警告をトリガーします。

2. RDR タグ 71071 の RDR( outtag="71071" )を集約し、データベース テーブル( sinkid="dbsink1" )に出力します。

データベース定義は、 <dbsink id="dbsink1"> タグの下の <sinks> セクションにあります。

テーブル定義は、テーブル コンフィギュレーション ファイルの tables.xml にあります。この定義は次の形式で構成されます。

<ragtable ragsinkid="dbsink1"
dbtabname="RPT_AGG_NUR"
name="AGGNUR"
ragouttag="71071">

次のコードは、RAG アダプタの設定サンプルです。

<?xml version="1.0"?>
<!DOCTYPE ragadapterconf [
<!ELEMENT ragadapterconf (fileversion, config)>
<!ELEMENT fileversion (#PCDATA)>
<!ELEMENT config (aggregations, sinks)>
<!ELEMENT aggregations (aggregation+)>
<!ELEMENT aggregation (bucketident, closures, accumulators, monitors)>
<!ATTLIST aggregation
id CDATA #REQUIRED
intag CDATA #REQUIRED
outtag CDATA #REQUIRED
sinkid CDATA #REQUIRED
>
<!ELEMENT bucketident (field | metafield)+>
<!ELEMENT closures (closure*)>
<!ELEMENT closure (closurespec+)>
<!ATTLIST closure
field CDATA #REQUIRED
>
<!ELEMENT closurespec (equivvalue+)>
<!ATTLIST closurespec
type (string | int | long | double) #REQUIRED
primaryvalue CDATA #REQUIRED
>
<!ELEMENT equivvalue EMPTY>
<!ATTLIST equivvalue
val CDATA #REQUIRED
>
<!ELEMENT accumulators (field+)>
<!ELEMENT monitors (changemonitor | maxmonitor | timeoutmonitor)*>
<!ELEMENT changemonitor EMPTY>
<!ATTLIST changemonitor
action (warn | checkpoint) #REQUIRED
field CDATA #REQUIRED
active (true | false) #REQUIRED
>
<!ELEMENT maxmonitor EMPTY>
<!ATTLIST maxmonitor
action (warn | checkpoint) #REQUIRED
field CDATA #REQUIRED
maxvalue CDATA #REQUIRED
active (true | false) #REQUIRED
>
<!ELEMENT timeoutmonitor EMPTY>
<!ATTLIST timeoutmonitor
action (warn | checkpoint) #REQUIRED
maxsec CDATA #REQUIRED
active (true | false) #REQUIRED
>
<!ELEMENT field EMPTY>
<!ATTLIST field
index CDATA #REQUIRED
type (string | int | long | double) #REQUIRED
>
<!ELEMENT sinks (csvsink | dbsink | generalsink)+>
<!ELEMENT csvsink EMPTY>
<!ATTLIST csvsink
id CDATA #REQUIRED
classname CDATA #REQUIRED
filenameformat CDATA #REQUIRED
dirname CDATA #REQUIRED
maxagesec CDATA #REQUIRED
maxlines CDATA #REQUIRED
usequotes (true | false) #REQUIRED
active (true | false) #REQUIRED
>
<!ELEMENT dbsink EMPTY>
<!ATTLIST dbsink
id CDATA #REQUIRED
classname CDATA #REQUIRED
active (true | false) #REQUIRED
>
<!ELEMENT generalsink EMPTY>
<!ATTLIST generalsink
id CDATA #REQUIRED
classname CDATA #REQUIRED
active (true | false) #REQUIRED
>
]>
<ragadapterconf>
<fileversion>
$File: ragadapter.xml $ $Revision: #3 $
$Author: ronv $
$DateTime: 2005/08/15 15:48:23 $
</fileversion>
<config>
<aggregations>
<aggregation id="NUR's by subscriber and subs usage counter"
intag="4042321920" outtag="71070" sinkid="csv1">
<bucketident>
<!-- SUBSCRIBER_ID=0, SUBS_USG_CNT_ID=2 -->
<field index="0" type="string"/>
<field index="2" type="int"/>
</bucketident>
<closures>
<closure field="0">
<closurespec type="string" primaryvalue="GuyM">
<equivvalue val="RonK"/>
<equivvalue val="OmerT"/>
<equivvalue val="GuyM"/>
</closurespec>
<closurespec type="string" primaryvalue="OdedE">
<equivvalue val="NimrodR"/>
<equivvalue val="YossiO"/>
<equivvalue val="LironL"/>
</closurespec>
</closure>
<closure field="2">
<closurespec type="int" primaryvalue="15">
<equivvalue val="5"/>
<equivvalue val="6"/>
<equivvalue val="7"/>
</closurespec>
</closure>
</closures>
<accumulators>
<!-- up=8, down=9, sessions=10 -->
<field index="8" type="long"/>
<field index="9" type="long"/>
<field index="10" type="long"/>
</accumulators>
<!-- nothing to monitor for change in NUR really.
For sake of testing, let's warn if DURATION changes. -->
<monitors>
<maxmonitor action="checkpoint" field="8" maxvalue="10000" active="true"/>
<maxmonitor action="checkpoint" field="9" maxvalue="10000" active="true"/>
<changemonitor action="warn" field="6" active="true"/>
<timeoutmonitor action="checkpoint" maxsec="60" active="true"/>
</monitors>
</aggregation>
<aggregation id="NUR's by subscriber only, per SCE"
intag="4042321920" outtag="71071" sinkid="dbsink1">
<bucketident>
<field index="0" type="string"/>
<metafield source="record-source" type="int"/>
</bucketident>
<closures/>
<accumulators>
<field index="8" type="long"/>
<field index="9" type="long"/>
<field index="10" type="long"/>
</accumulators>
<monitors>
<timeoutmonitor action="checkpoint" maxsec="60" active="true"/>
</monitors>
</aggregation>
</aggregations>
 
<sinks>
<csvsink id="csv1"
classname="com.cisco.scmscm.adapters.rag.sinks.CSVSink"
filenameformat="yyyy-MM-dd_HH-mm-ss-SSS'.csv'"
dirname="~/cm/adapters/RAGAdapter/csvfiles"
maxagesec="300" maxlines="1000" usequotes="true" active="true"/>
<dbsink id="dbsink1"
classname="com.cisco.scmscm.adapters.rag.sinks.JDBCSink" active="false"/>
</sinks>
</config>
</ragadapterconf>