Definir visualizações das tabelas operacionais do Junos PyEZ que analisam a saída não estruturada
Tabelas operacionais (op) do Junos PyEZ para obter dados de extração de saída não estruturados da saída de texto de um comando CLI executado em um dispositivo Junos ou um comando vty executado em um determinado Concentrador PIC Flexível (FPC). Uma tabela está associada a uma visão, que é usada para acessar campos nos itens da Tabela e mapeá-los para variáveis Python definidas pelo usuário. Você associa uma Tabela a uma visão específica, incluindo a view propriedade na definição da Tabela, que tem o nome View como seu argumento.
Uma vista mapeia suas variáveis definidas pelo usuário para dados nos itens de Tabela selecionados. Uma vista permite que você acesse campos específicos na saída como variáveis com propriedades que podem ser manipuladas em Python. O Junos PyEZ lida com a extração dos dados em Python, bem como qualquer tipo de conversão ou normalização de dados. As chaves definidas na visualização devem ser nomes de variáveis python válidos.
Este tópico discute os diferentes componentes da Visão.
Resumo dos parâmetros em visualizações para analisar a saída não estruturada
As visualizações do Junos PyEZ, como tabelas, são formatadas usando YAML. As visualizações que analisam a saída não estruturada podem incluir uma série de parâmetros, que são resumidos na Tabela 1.
Parâmetro de visualização |
Descrição |
|---|---|
Veja o nome |
Identificador definido pelo usuário para a visualização. |
|
(Opcional) Lista de títulos da coluna na saída de comando. |
|
(Opcional) Array associativo, ou nívem, de um ou mais pares de valor-chave que mapeiam uma chave definida pelo usuário para uma corda contendo uma expressão matemática. Para cada iteração dos dados, a expressão é avaliada usando a função Python |
|
(Opcional) Array associativo, ou cookies, de pares de valor-chave que mapeiam uma chave definida pelo usuário para uma string. Se a string estiver presente na saída, a variável será definida como True, caso contrário, a variável será definida como Falsa. |
|
(Opcional) Array associativo, ou diagrama, de pares de valor-chave que mapeiam uma chave definida pelo usuário para o nome de uma Tabela aninhada que analisa uma seção específica da saída de comando. |
|
(Opcional) Lista de uma ou mais chaves definidas em |
|
(Opcional) Lista de expressões regulares para combinar com o conteúdo desejado. |
Veja o nome
O nome De visualização é um identificador definido pelo usuário para a visualização. Você associa uma Tabela a uma visão específica, incluindo a view propriedade na definição da Tabela e fornecendo o nome De visualização como argumento.
O exemplo a seguir define uma visão nomeada ChassisFanView, que é mencionada pelo parâmetro da view Tabela:
---
ChassisFanTable:
command: show chassis fan
key: fan-name
view: ChassisFanView
ChassisFanView:
columns:
fan-name: Item
fan-status: Status
fan-rpm: RPM
fan-measurement: Measurement
Colunas
Você pode usar o columns parâmetro em uma Visão para extrair e analisar a saída de comando que é formatada em linhas e colunas.
Considere a saída de comando a seguir show ospf neighbor :
Address Interface State ID Pri Dead 198.51.100.2 ge-0/0/0.0 Full 192.168.0.2 128 37 198.51.100.6 ge-0/0/1.0 Full 192.168.0.3 128 34
Para extrair os dados, inclua o columns parâmetro na Visualização e mapeie seu nome variável Python para o nome da coluna. O aplicativo armazena a chave e o valor extraído da saída de comando para essa coluna como um par de valor-chave no par de valor-chave para o item determinado.
A visão a seguir extrai os dados de cada coluna na show ospf neighbor saída de comando:
---
OspfNeighborTable:
command: show ospf neighbor
key: Address
view: OspfNeighborView
OspfNeighborView:
columns:
neighbor_address: Address
interface: Interface
neighbor_state: State
neighbor_id: ID
neighbor_priority: Pri
activity_timer: Dead
Quando você recupera e imprime os dados no aplicativo Junos PyEZ, os dados para cada vizinho incluem as chaves da coluna e os dados correspondentes.
from jnpr.junos import Device
from jnpr.junos.command.ospf_neighbor import OspfNeighborTable
from pprint import pprint
import json
with Device(host='router1.example.com') as dev:
stats = OspfNeighborTable(dev)
stats.get()
pprint(json.loads(stats.to_json()))
user@host:~$ python3 junos-pyez-ospf-neighbors.py
{'198.51.100.2': {'activity_timer': 39,
'interface': 'ge-0/0/0.0',
'neighbor_address': '198.51.100.2',
'neighbor_id': '192.168.0.2',
'neighbor_priority': 128,
'neighbor_state': 'Full'},
'198.51.100.6': {'activity_timer': 36,
'interface': 'ge-0/0/1.0',
'neighbor_address': '198.51.100.6',
'neighbor_id': '192.168.0.3',
'neighbor_priority': 128,
'neighbor_state': 'Full'}}
Para filtrar os dados para incluir apenas dados de colunas selecionadas, inclua o filters parâmetro na Visualização. Para obter mais informações, veja filtros.
Alguma saída de comando inclui títulos de coluna que abrangem várias linhas, por exemplo:
FI interrupt statistics
-----------------------
--------------------------------------------------------------------------------
Stream Total RLIM Total Cell timeout Total Reorder Total cell Total number
request PT/MALLOC Ignored cell timeout drops in of times
counter Usemeter errors secure mode entered into
saturation Drops secure mode
--------------------------------------------------------------------------------
36 0 0 1 1 0 0
128 0 0 1 49 0 0
142 0 0 1 53 0 0
--------------------------------------------------------------------------------
...
Para definir um título de coluna multiline em uma vista, definir o elemento-chave da coluna igual a uma lista das palavras em cada linha para esse título. A visão a seguir define as colunas para a saída de comando anterior:
CChipFiStatsTable:
command: show mqss {{ chip_instance }} fi interrupt-stats
target: fpc8
args:
chip_instance: 0
key: Stream
view: CChipFiStatsView
CChipFiStatsView:
columns:
stream: Stream
req_sat:
- Total RLIM
- request
- counter
- saturation
cchip_fi_malloc_drops:
- Total
- PT/MALLOC
- Usemeter
- Drops
cell_timeout_ignored:
- Cell timeout
- Ignored
cchip_fi_cell_timeout:
- Total Reorder
- cell timeout
- errors
drops_in_secure:
- Total cell
- drops in
- secure mode
times_in_secure:
- Total number
- of times
- entered into
- secure mode
Expressão Eval (eval)
Você pode usar o parâmetro opcional eval para adicionar ou modificar pares de valor-chave nos dados finais devolvidos pela Tabela e visualização. O eval parâmetro mapeia um nome-chave para uma corda que contém uma expressão matemática que é avaliada pela função Python eval . Você pode incluir o eval parâmetro em tabelas e visualizações, e eval pode definir e calcular vários valores.
Quando você usa eval em uma Tabela, ela faz referência ao diagrama completo de dados para o cálculo, e o valor chave e calculado é adicionado como um único item adicional ao níquete. Quando você usa eval em uma Visualização, a expressão é calculada em cada iteração dos dados, e o valor calculado é adicionado aos dados para essa iteração. Se o eval nome-chave corresponde a uma chave definida na Visualização, eval substitua o valor dessa chave pelo valor calculado. Se o eval nome-chave não corresponder a uma chave definida na Visualização, eval adicione a nova chave e o valor calculado aos dados.
A eval expressão pode fazer referência ao data náucaro devolvido pela Vista. A expressão deve fazer referência data usando uma variável modelo Jinja, para que o Junos PyEZ possa substituir a variável pelo nívem quando a expressão for avaliada.
O exemplo a seguir usa eval na definição De visualização. A cpu entrada modifica o valor existente do cpu campo para cada item no níquete de dados, e a max entrada cria um novo par de valor-chave para cada item no níquete de dados.
---
FPCThread:
command: show threads
target: Null
key: Name
view: FPCThreadView
FPCThreadView:
columns:
pid-pr: PID PR
state: State
name: Name
stack: Stack Use
time: Time (Last/Max/Total)
cpu: cpu
eval:
cpu: "'{{ cpu }}'[:-1]"
max: "('{{ time }}'.split('/'))[1]"
Considere a saída de amostra a seguir para o show threads comando vty:
PID PR State Name Stack Use Time (Last/Max/Total) cpu --- -- ------- --------------------- --------- --------------------- 1 H asleep Maintenance 680/32768 0/5/5 ms 0% 2 L running Idle 1452/32768 0/22/565623960 ms 80% 3 H asleep Timer Services 1452/32768 0/7/1966 ms 0% ...
O parâmetro do eval View modifica cada cpu entrada para omitir o sinal por cento (%). Como resultado, os dados incluem "0" em vez de "0%". Além disso, ela adiciona uma nova chave, maxe seu valor calculado para cada item.
'Maintenance': {'cpu': '0',
'max': '5',
'name': 'Maintenance',
'pid-pr': '1 H',
'stack': '680/32768',
'state': 'asleep',
'time': '0/5/5 ms'},
'Timer Services': {'cpu': '0',
'max': '7',
'name': 'Timer Services',
'pid-pr': '3 H',
'stack': '1452/32768',
'state': 'asleep',
'time': '0/7/1966 ms'},
...
Para exemplos que usam eval na definição de Tabela, veja Eval Expression (eval).
Existe
Você pode usar o parâmetro opcional exists em uma Visualização para indicar se uma string está presente na saída de comando. exists é um domínio de pares de valor-chave que mapeiam um nome variável Python definido pelo usuário na string para combinar na saída de comando. Se a corda estiver presente na saída, a variável será definida para True. Caso contrário, a variável está definida para False.
Considere a show host_loopback status-summary saída de comando vty.
SENT: Ukern command: show host_loopback status-summary Host Loopback Toolkit Status Summary: No detected wedges No toolkit errors
A tabela a seguir define exists para testar se a saída de comando inclui uma No detected wedges string ou uma No toolkit errors corda:
---
HostlbStatusSummaryTable:
command: show host_loopback status-summary
target: fpc1
view: HostlbStatusSummaryView
HostlbStatusSummaryView:
exists:
no_detected_wedges: No detected wedges
no_toolkit_errors: No toolkit errors
Quando você usa a Tabela e a Visualização para testar as cordas e publicar os valores resultantes em seu aplicativo Junos PyEZ, ambas as variáveis estão definidas para True este caso.
{'no_detected_wedges': True, 'no_toolkit_errors': True}
Campos
A saída de comando pode ser longa e complexa, e você pode precisar de uma lógica diferente para analisar diferentes seções da saída. Em alguns casos, você não pode analisar adequadamente a saída de comando usando uma única tabela e visualização. Para analisar esse tipo de saída, você pode incluir o parâmetro opcional fields na Visualização. fields é um diagrama de pares de valor-chave que mapeiam uma chave definida pelo usuário para o nome de uma Tabela aninhada que seleciona uma seção específica da saída de comando. Cada tabela aninhada pode fazer referência à sua própria Vista, que é usada para analisar os dados selecionados por essa Tabela.
Considere a show xmchip 0 pt stats saída de comando vty, que tem duas seções diferentes de dados:
SENT: Ukern command: show xmchip 0 pt stats WAN PT statistics (Index 0) --------------------------- PCT entries used by all WI-1 streams : 0 PCT entries used by all WI-0 streams : 0 PCT entries used by all LI streams : 0 CPT entries used by all multicast packets : 0 CPT entries used by all WI-1 streams : 0 CPT entries used by all WI-0 streams : 0 CPT entries used by all LI streams : 0 Fabric PT statistics (Index 1) ------------------------------ PCT entries used by all FI streams : 0 PCT entries used by all WI (Unused) streams : 0 PCT entries used by all LI streams : 0 CPT entries used by all multicast packets : 0 CPT entries used by all FI streams : 0 CPT entries used by all WI (Unused) streams : 0 CPT entries used by all LI streams : 0
A visualização a seguir XMChipStatsView usa o fields parâmetro para definir duas Tabelas adicionais, que são usadas para analisar as duas seções diferentes da saída de comando. As _WANPTStatTable tabelas e _FabricPTStatTable as tabelas extraem os dados das WAN PT statistics seções e das Fabric PT statistics seções, respectivamente. Neste caso, as Tabelas usam o delimiter parâmetro para extrair e dividir os dados, para que não precisem fazer referência a uma visão separada.
XMChipStatsTable:
command: show xmchip 0 pt stats
target: fpc1
view: XMChipStatsView
XMChipStatsView:
fields:
wan_pt_stats: _WANPTStatTable
fabric_pt_stats: _FabricPTStatTable
_WANPTStatTable:
title: WAN PT statistics (Index 0)
delimiter: ":"
_FabricPTStatTable:
title: Fabric PT statistics (Index 1)
delimiter: ":"
Quando você recupera e imprime os dados no aplicativo Junos PyEZ, cada chave definida embaixo fields contém os dados selecionados e analisados pela Tabela correspondente.
{'fabric_pt_stats': {'CPT entries used by all FI streams': 0,
'CPT entries used by all LI streams': 0,
'CPT entries used by all WI (Unused) streams': 0,
'CPT entries used by all multicast packets': 0,
'PCT entries used by all FI streams': 0,
'PCT entries used by all LI streams': 0,
'PCT entries used by all WI (Unused) streams': 0},
'wan_pt_stats': {'CPT entries used by all LI streams': 0,
'CPT entries used by all WI-0 streams': 0,
'CPT entries used by all WI-1 streams': 0,
'CPT entries used by all multicast packets': 0,
'PCT entries used by all LI streams': 0,
'PCT entries used by all WI-0 streams': 0,
'PCT entries used by all WI-1 streams': 0}}
Como outro exemplo, considere a show ttp statistics saída de comando vty:
TTP Statistics:
Receive Transmit
---------- ----------
L2 Packets 4292 1093544
L3 Packets 542638 0
Drops 0 0
Netwk Fail 0 0
Queue Drops 0 0
Unknown 0 0
Coalesce 0 0
Coalesce Fail 0 0
TTP Transmit Statistics:
Queue 0 Queue 1 Queue 2 Queue 3
---------- ---------- ---------- ----------
L2 Packets 1093544 0 0 0
L3 Packets 0 0 0 0
TTP Receive Statistics:
Control High Medium Low Discard
---------- ---------- ---------- ---------- ----------
L2 Packets 0 0 4292 0 0
L3 Packets 0 539172 3466 0 0
Drops 0 0 0 0 0
Queue Drops 0 0 0 0 0
Unknown 0 0 0 0 0
Coalesce 0 0 0 0 0
Coalesce Fail 0 0 0 0 0
TTP Receive Queue Sizes:
Control Plane : 0 (max is 4473)
High : 0 (max is 4473)
Medium : 0 (max is 4473)
Low : 0 (max is 2236)
TTP Transmit Queue Size: 0 (max is 6710)
O FPCTTPStatsView View usa o parâmetro para fazer referência a fields várias tabelas aninhadas, que extraem os dados nas diferentes seções da saída. Cada Tabela faz referência à sua própria visão ou usa o delimiter parâmetro para analisar os dados nessa seção.
---
FPCTTPStatsTable:
command: show ttp statistics
target: fpc2
view: FPCTTPStatsView
FPCTTPStatsView:
fields:
TTPStatistics: _FPCTTPStatisticsTable
TTPTransmitStatistics: _FPCTTPTransmitStatisticsTable
TTPReceiveStatistics: _FPCTTPReceiveStatisticsTable
TTPQueueSizes: _FPCTTPQueueSizesTable
_FPCTTPStatisticsTable:
title: TTP Statistics
view: _FPCTTPStatisticsView
_FPCTTPStatisticsView:
columns:
rcvd: Receive
tras: Transmit
_FPCTTPTransmitStatisticsTable:
title: TTP Transmit Statistics
view: _FPCTTPTransmitStatisticsView
_FPCTTPTransmitStatisticsView:
columns:
queue0: Queue 0
queue1: Queue 1
queue2: Queue 2
queue3: Queue 3
filters:
- queue2
_FPCTTPReceiveStatisticsTable:
title: TTP Receive Statistics
key: name
key_items:
- Coalesce
view: _FPCTTPReceiveStatisticsView
_FPCTTPReceiveStatisticsView:
columns:
control: Control
high: High
medium: Medium
low: Low
discard: Discard
_FPCTTPQueueSizesTable:
title: TTP Receive Queue Sizes
delimiter: ":"
Quando você recupera e imprime os dados no aplicativo Junos PyEZ, cada fields chave contém os dados extraídos e analisados pela Tabela correspondente.
{'TTPQueueSizes': {'Control Plane': '0 (max is 4473)',
'High': '0 (max is 4473)',
'Low': '0 (max is 2236)',
'Medium': '0 (max is 4473)'},
'TTPReceiveStatistics': {'Coalesce': {'control': 0,
'discard': 0,
'high': 0,
'low': 0,
'medium': 0,
'name': 'Coalesce'}},
'TTPStatistics': {'Coalesce': {'name': 'Coalesce', 'rcvd': 0, 'tras': 0},
'Coalesce Fail': {'name': 'Coalesce Fail',
'rcvd': 0,
'tras': 0},
'Drops': {'name': 'Drops', 'rcvd': 0, 'tras': 0},
'L2 Packets': {'name': 'L2 Packets',
'rcvd': 4292,
'tras': 1093544},
'L3 Packets': {'name': 'L3 Packets',
'rcvd': 542638,
'tras': 0},
'Netwk Fail': {'name': 'Netwk Fail',
'rcvd': 0,
'tras': 173},
'Queue Drops': {'name': 'Queue Drops',
'rcvd': 0,
'tras': 0},
'Unknown': {'name': 'Unknown', 'rcvd': 0, 'tras': 0}},
'TTPTransmitStatistics': {'L2 Packets': {'queue2': 0},
'L3 Packets': {'queue2': 0}}}
Filtros
O columns parâmetro extrai dados da saída de comando que é formatado em linhas e colunas. Ao incluir o columns parâmetro em uma Visualização, você pode incluir opcionalmente o filters parâmetro para filtrar quais dados da coluna estão incluídos na saída final. O filters parâmetro define uma lista de uma ou mais chaves definidas em columns. O conjunto final de dados inclui apenas dados das colunas selecionadas. Você pode fornecer filtros padrão na definição de Visualização e também pode definir ou substituir os valores do filtro no aplicativo Junos PyEZ.
Considere a show ospf neighbor saída de comando:
Address Interface State ID Pri Dead 198.51.100.2 ge-0/0/0.0 Full 192.168.0.2 128 37 198.51.100.6 ge-0/0/1.0 Full 192.168.0.3 128 34
Na visão a seguir, o columns parâmetro define as chaves para todas as colunas na saída de comando correspondente, mas o filters parâmetro inclui apenas os dados das colunas e State do Address níquete de dados.
---
OspfNeighborFiltersTable:
command: show ospf neighbor
key: Address
view: OspfNeighborFiltersView
OspfNeighborFiltersView:
columns:
neighbor_address: Address
interface: Interface
neighbor_state: State
neighbor_id: ID
neighbor_priority: Pri
activity_timer: Dead
filters:
- neighbor_address
- neighbor_state
O código Junos PyEZ a seguir chama get() primeiro sem nenhum argumento, que recupera os dados usando a lista padrão de filtros definidos na Visualização. A segunda chamada inclui get() o filters argumento, que substitui a lista de filtros definida no View.
from jnpr.junos import Device
from Tables.show_ospf_neighbor_filter import OspfNeighborFiltersTable
from pprint import pprint
import json
with Device(host='router1.example.com') as dev:
stats = OspfNeighborFiltersTable(dev)
stats.get()
pprint(json.loads(stats.to_json()))
print('\n')
stats.get(filters=['neighbor_address', 'neighbor_id', 'neighbor_state'])
pprint(json.loads(stats.to_json()))
Quando você executa o aplicativo, a primeira chamada para get() usar os filtros definidos na Visualização e a segunda chamada usa os filtros definidos na chamada, que se sobrepõem aos definidos na Visualização.
user@host:~$ python3 junos-pyez-ospf-filters.py
{'198.51.100.2': {'neighbor_address': '198.51.100.2', 'neighbor_state': 'Full'},
'198.51.100.6': {'neighbor_address': '198.51.100.6', 'neighbor_state': 'Full'}}
{'198.51.100.2': {'neighbor_address': '198.51.100.2',
'neighbor_id': '192.168.0.2',
'neighbor_state': 'Full'},
'198.51.100.6': {'neighbor_address': '198.51.100.6',
'neighbor_id': '192.168.0.3',
'neighbor_state': 'Full'}}
Regex
Você pode usar o parâmetro opcional regex em uma Vista para combinar e extrair campos específicos na saída de comando. regex é um diagrama que mapeia as chaves para expressões regulares. Se a Tabela correspondente não definir item: '*', o Junos PyEZ combina as expressões regulares e corresponde ao resultado em relação a cada linha de saída. No entanto, se a Tabela definir item: '*' extrair os dados como uma única corda de texto, o Junos PyEZ, em vez disso, corresponde a cada expressão regular individual em relação a toda a cadeia de texto.
O grupo de captura definido na expressão regular determina os dados extraídos do campo e armazenados no níquete de dados. Se você definir um grupo de captura, apenas o valor para esse grupo é armazenado nos dados. Caso contrário, o Junos PyEZ armazena o valor que corresponde à expressão completa. Por exemplo, (d+.d+) recupera e armazena um valor flutuante da expressão de pesquisa de strings, enquanto (d+).d+ apenas armazena a parte inteiro dos dados. Se você definir vários grupos, apenas o valor para o primeiro grupo é armazenado.
O Junos PyEZ utiliza o pyparsing módulo para definir uma série de palavras-chave integradas que você pode usar no lugar de uma expressão regular. A Tabela 2 lista a palavra-chave, uma breve descrição e a expressão correspondente, de onde pp é derivado import pyparsing as pp.
Palavra |
Descrição |
Expressão |
|---|---|---|
|
Palavra que contém apenas caracteres hexadimais |
hex_numbers = pp.OneOrMore(pp.Word(pp.nums, min=1))
& pp.OneOrMore(pp.Word('abcdefABCDEF', min=1)) |
|
Palavra que consiste em um valor inteiro ou flutuante |
numbers = (pp.Word(pp.nums) + pp.Optional(pp.Literal('.') +
pp.Word(pp.nums))).setParseAction(lambda i: ''.join(i)) |
|
Palavra composta de dígitos e um sinal percentual de rastreamento (%) |
percentage = pp.Word(pp.nums) + pp.Literal('%') |
|
Uma ou mais palavras compostas de caracteres imprimíveis (quaisquer caracteres não whitespace) |
printables = pp.OneOrMore(pp.Word(pp.printables)) |
|
Palavra composta de caracteres alfa ou alfanumérico |
word = pp.Word(pp.alphanums) | pp.Word(pp.alphas) |
|
Uma ou mais |
words = (pp.OneOrMore(word)).setParseAction(lambda i: ' '.join(i)) |
Considere a saída de comando a seguir show icmp statistics . Cada seção da saída está sob um título de seção específico, e os dados consistem em um número e uma ou mais palavras.
ICMP Statistics:
0 requests
0 throttled
0 network unreachables
0 ttl expired
0 redirects
0 mtu exceeded
0 source route denials
0 filter prohibited
0 other unreachables
0 parameter problems
0 ttl captured
0 icmp/option handoffs
0 igmp v1 handoffs
0 tag te requests
0 tag te to RE
ICMP Errors:
0 unknown unreachables
0 unsupported ICMP type
0 unprocessed redirects
0 invalid ICMP type
0 invalid protocol
0 bad input interface
0 bad route lookup
0 bad nh lookup
0 bad cf mtu
0 runts
ICMP Discards:
0 multicasts
0 bad source addresses
0 bad dest addresses
0 IP fragments
0 ICMP errors
0 unknown originators
ICMP Debug Messages:
0 throttled
ICMP Rate Limit Settings:
500 pps per iff
1000 pps total
Para analisar a saída anterior, a vista principal define fields, que faz referência a tabelas e visualizações aninhadas que analisam cada seção da saída. As visualizações aninhadas definem o regex parâmetro a combinar com os dados extraídos pela Tabela correspondente.
---
ICMPStatsTable:
command: show icmp statistics
target: fpc1
view: ICMPStatsView
ICMPStatsView:
fields:
discards: _ICMPDiscardsTable
errors: _ICMPErrorsTable
rate: _ICMPRateTable
_ICMPDiscardsTable:
title: ICMP Discards
key: name
view: _ICMPDiscardsView
_ICMPDiscardsView:
regex:
value: \d+
name: '(\w+(\s\w+)*)'
_ICMPErrorsTable:
title: ICMP Errors
key: name
view: _ICMPErrorsView
_ICMPErrorsView:
regex:
error: numbers
name: words
_ICMPRateTable:
title: ICMP Rate Limit Settings
key: name
view: _ICMPRateView
_ICMPRateView:
regex:
rate: numbers
name: words
Por exemplo, a _ICMPDiscardsTable Tabela seleciona os dados da ICMP Discards seção na saída de comando. O _ICMPDiscardsView View define duas chaves e name, value qual mapa para expressões regulares. value combina com um ou mais dígitos, e name combina com uma ou mais palavras. Como a Tabela não defineitem: '*', as expressões regulares são combinadas e combinadas com cada linha de dados nessa seção.
_ICMPDiscardsTable:
title: ICMP Discards
key: name
view: _ICMPDiscardsView
_ICMPDiscardsView:
regex:
value: \d+
name: '(\w+(\s\w+)*)'
A _ICMPErrorsTable Tabela seleciona os dados da ICMP Errors seção na saída de comando. O _ICMPErrorsView View define as error teclas e name as teclas e usa as palavras-chave integradas numbers e words no lugar de definir explicitamente expressões regulares.
_ICMPErrorsTable:
title: ICMP Errors
key: name
view: _ICMPErrorsView
_ICMPErrorsView:
regex:
error: numbers
name: words
Se a Tabela definir, os dados extraídos item: '*'serão considerados como uma única corda de texto. Neste caso, cada expressão regular na visualização correspondente corresponde a toda a corda.
Considere a saída de show ithrottle id 0 comando.
SENT: Ukern command: show ithrottle id 0
ID Usage % Cfg State Oper State Name
-- ------- --------- ---------- --------
0 50.0 1 1 TOE ithrottle
Throttle Times: In hptime ticks In ms
--------------- ------
Timer Interval 333333 5.000
Allowed time 166666 2.500
Allowed excess 8333 0.125
Start time 488655082 n/a
Run time this interval 0 0.000
Deficit 0 0.000
Run time max 17712 0.266
Run time total 144154525761 2162317
Min Usage Perc: 25.0
Max Usage Perc: 50.0
AdjustUsageEnable: 1
Throttle Stats:
Starts : 65708652
Stops : 65708652
Checks : 124149442
Enables : 0
Disables : 0
AdjUp : 6
AdjDown : 4
A tabela a seguir usa item: '*' para extrair os dados como uma única corda. O parâmetro do regex View define três expressões regulares. Cada padrão de regex é combinado com toda a corda. Como as expressões regulares definem grupos de captura, o Junos PyEZ só armazena os dados que correspondem ao grupo.
IthrottleIDTable:
command: show ithrottle id {{ id }}
args:
id: 0
item: '*'
target: fpc1
view: IthrottleIDView
IthrottleIDView:
regex:
min_usage: 'Min Usage Perc: (\d+\.\d+)'
max_usage: 'Max Usage Perc: (\d+\.\d+)'
usg_enable: 'AdjustUsageEnable: (\d)'
fields:
throttle_stats: _ThrottleStatsTable
_ThrottleStatsTable:
title: Throttle Stats
delimiter: ":"
Quando você recupera e imprime os dados no aplicativo Junos PyEZ, os dados incluem os três regex itens, que contêm o valor combinado pelo grupo de captura para essa expressão.
{'max_usage': 50.0,
'min_usage': 25.0,
'throttle_stats': {'AdjDown': 4,
'AdjUp': 6,
'Checks': 124149442,
'Disables': 0,
'Enables': 0,
'Starts': 65708652,
'Stops': 65708652},
'usg_enable': 1}