檢視原始碼 snmpa_local_db (snmp v5.18)
SNMP 內建資料庫
模組 snmpa_local_db
包含使用 SNMP 內建資料庫實作表格(和變數)的函式。資料庫存在兩個實例,一個為暫時性,另一個為持久性。暫時性資料庫使用 ets 實作,持久性資料庫則使用 dets 實作。
此資料庫存在擴展性問題。
- 對於大型表格,插入和刪除效率不高。
這個問題最好使用 Mnesia 來解決。
以下函式描述了 snmpa_local_db
的介面。每個函式都有一個 Mnesia 對應項。引數 NameDb
是一個 tuple {Name, Db}
,其中 Name
是受管理物件的符號名稱(如在 MIB 中定義),而 Db
是 volatile
或 persistent
。mnesia
不可行,因為所有這些函式都是 snmpa_local_db
特有的。
通用資料類型
在以下定義的函式中,適用以下限制
Db = volatile | persistent
參見
ets(3), dets(3), snmp_generic(3)
摘要
函式
-spec dump() -> ok | {error, Reason} when Reason :: term().
此函式可用於手動將資料庫轉儲到檔案。
-spec match(Table, Pattern) -> [Match] when Table :: snmpa:name_db() | snmpa:name(), Pattern :: ets:match_pattern(), Match :: term().
在表格上執行 ets/dets 比對。
有關 Pattern
和回傳值的說明,請參見 ets:match/2
。
-spec print() -> term().
等同於 print/2
。
-spec print(Table) -> term() when Table :: snmpa:name().
等同於 print/2
。
-spec print(Table, Db) -> term() when Table :: snmpa:name(), Db :: volatile | persistent.
在螢幕上列印資料庫的內容。這對於除錯很有用,因為 STANDARD-MIB
和 OTP-SNMPEA-MIB
(以及您自己的 MIB)儲存在 snmpa_local_db
中。
Table
是資料庫中表格的原子。如果未提供名稱,則會顯示整個資料庫。
請注意,這些函式實際上並不會列印,而是使用 io:format/2,它們(僅)回傳資訊。如果在 shell 中執行,則資訊將會顯示在那裡(可能會被截斷)。
更好的用法是
io:format("~p~n", [snmpa_local_db:print()]).
-spec table_create(Table) -> boolean() when Table :: snmpa:name_db() | snmpa:name().
建立表格。如果表格已存在,則會銷毀舊副本。
如果 NameDb
引數指定不正確,則回傳 false
,否則回傳 true
。
資料庫(僅指定表格名稱)預設為 volatile
。
-spec table_create_row(Table, RowIndex, Row) -> boolean() when Table :: snmpa:name_db() | snmpa:name(), RowIndex :: snmp:row_index(), Row :: tuple().
在表格中建立一行。Row
是一個 tuple,其中包含所有欄的值,包括索引欄。
資料庫(僅指定表格名稱)預設為 volatile
。
-spec table_delete(Table) -> true when Table :: snmpa:name_db() | snmpa:name().
刪除表格。
資料庫(僅指定表格名稱)預設為 volatile
。
-spec table_delete_row(Table, RowIndex) -> boolean() when Table :: snmpa:name_db() | snmpa:name(), RowIndex :: snmp:row_index().
刪除表格中的行。
資料庫(僅指定表格名稱)預設為 volatile
。
-spec table_exists(Table) -> boolean() when Table :: snmpa:name_db() | snmpa:name().
檢查表格是否存在。
資料庫(僅指定表格名稱)預設為 volatile
。
-spec table_get_element(Table, RowIndex, Col) -> {value, Value} | undefined when Table :: snmpa:name_db() | snmpa:name(), RowIndex :: snmp:row_index(), Col :: snmp:column(), Value :: term().
從表格的行中取得欄的值(元素)。
資料庫(僅指定表格名稱)預設為 volatile
。
此函式存在已久,但沒有正確的 since 標籤,因此為了簡化,我們將 since 標籤設定為文件化的時間。
-spec table_get_row(Table, RowIndex) -> Row | undefined when Table :: snmpa:name_db() | snmpa:name(), RowIndex :: snmp:row_index(), Row :: tuple().
Row
是一個 tuple,其中包含所有欄的值,包括索引欄。
資料庫(僅指定表格名稱)預設為 volatile
。
-spec table_set_elements(Table, RowIndex, Cols) -> boolean() when Table :: snmpa:name_db() | snmpa:name(), RowIndex :: snmp:row_index(), Cols :: [{Col, Value}], Col :: snmp:column(), Value :: term().
更新此表格行的指定欄位物件。
資料庫(僅指定表格名稱)預設為 volatile
。
此函式存在已久,但沒有正確的 since 標籤,因此為了簡化,我們將 since 標籤設定為文件化的時間。