PDF

Przykłady zastosowania

Skrypt trybu utrzymania

Ten skrypt w języku Python wprowadza węzeł w stan 'monitorowanie wyłączone' i ustawia daną wiadomość w polu info1.

Może to być wykorzystane do uniknięcia fałszywych alertów na węzłach będących w trakcie konserwacji oraz do informowania innych osób, że stan wyłączenia jest celowy.

Wymagania wstępne:

  • Python3
  • argparse lib (pip install argparse)
  • requests lib (pip install requests)

Zastosowanie

./python maintenance-mode.py 192.168.0.50 disable -msg Maintenance
  1. Pierwszą rzeczą jest dodanie aplikacji do NetCruncha. Zapoznaj się z rozdziałem: Wprowadzenie, aby zobaczyć, jak dodać aplikację.

  2. Skrypt zawiera dwie linie kodu, które należy zaktualizować::

    • nc_address = "Adres NetCruncha"
    • nc_api_key = "Klucz API aplikacji"
  3. Wymagane argumenty do uruchomienia skryptu to::

    • węzeł (ID, adres IP lub nazwa)
    • akcja (włącz lub wyłącz)

    Opcjonalnie możesz ustawić wiadomość w polu Info1, podając argument -msg. Jeśli argument -msg zostanie pominięty - pole info1 zostanie wyczyszczone.

Plik skryptu

maintenance-mode.py

import requests import argparse

nc_address = "NetCrunch Address" nc_api_key = "Application API-Key"

def send_request(url, request): headers = { "content-type":"application/json", 'x-api-key': nc_api_key } if (request == "delete"): r = requests.delete(url, headers = headers) print ("Status Code:" , r.status_code ,", " "NetCrunch response: " , r.text) return r elif(request == "put"): r = requests.put(url, headers = headers) print ("Status Code:" , r.status_code ,", " "NetCrunch response: " , r.text) return r

parser = argparse.ArgumentParser() parser.add_argument("node", help="Node to change monitoring state (id, ip address or dns name)") parser.add_argument("action", help="Monitoring state (enable, disable)") parser.add_argument("-msg", nargs='?', help="Optional: Set Message to info1 field, ommit to clear info1 field") args = parser.parse_args()

if(args.action == "enable"): action = "on" else: action = "off"

url = "http://" + nc_address + "/api/rest/2/nodes/" + args.node + "/monitoring/" + action print("Changing monitoring state:") send_request(url, "put")

if(args.msg != None): url = "http://" + nc_address + "/api/rest/2/nodes/" + args.node + "/custom-fields/Info%201?"+ nc_api_key +"&value="+args.msg print("Adding Info1 field:") send_request(url, "put") else: url = "http://" + nc_address + "/api/rest/2/nodes/" + args.node + "/custom-fields/Info%201?"+ nc_api_key print("Removing data from Info1 Field: ") send_request(url, "delete")

Importuj węzły z pliku CSV

Ten plik w języku javascript może być używany do dodawania węzłów do NetCruncha z pliku CSV. Ponadto ten przypadek zastosowania doda dodatkowe dane do dwóch pól niestandardowych (Lokalizacja i Info2) do każdego węzła.

Skrypt zawiera dwa pliki - plik skryptu (add-nodes.js) oraz dane (data.csv).

Wymagania wstępne:

  • NodeJS

Zastosowanie

node add-nodes.js
  1. Pierwszą rzeczą jest dodanie aplikacji do NetCruncha. Zapoznaj się z rozdziałem: Wprowadzenie, aby zobaczyć, jak dodać aplikację
  2. Skrypt zawiera dwie pozycje, które należy zmienić, aby wszystko działało:
    • nazwa hosta: 'NetCrunch address or DNS name'
    • "x-api-key": 'application api key' (wygenerowany w kroku 1)
  3. Skrypt nie wymaga dodatkowych parametrów - pobiera wszystkie dane z pliku data.csv i wysyła je do NetCruncha

Dodatkowe informacje

Skrypt można zmodyfikować, aby zawierał więcej niestandardowych pól - dodaj dodatkową funkcję 'else if' z nazwą pola niestandardowego tak jak w przykładzie. Upewnij się, że niestandardowe pole, które powinno zostać dodane, jest zdefiniowane w NetCrunchu przed wykonaniem skryptu.

W przypadku dodatkowych pól, takich jak Display Name - dodaj nazwę parametru w pierwszym wierszu pliku CSV i dodaj go w wierszach (patrz Lista właściwości węzła dla dostępnych parametrów).

Pliki skryptów

add-nodes.js

const http = require('http'), fs = require('fs'), readline = require('readline'), nodesFile = (__dirname + '/data.csv'), options = { method: 'POST', hostname: 'IP or Name of NC server', path: '/api/rest/2/nodes', headers: { 'Content-Type': 'application/json', "x-api-key": 'api-key' } };

function sendRequest(payload) { const req = http.request(options, res => { res.setEncoding('utf8'); if(res.statusCode != 200){ console.log("Error: Status code: " + res.statusCode + " Message: " + res.statusMessage); } else{ res.on('data', chunk => { let response = JSON.parse(chunk); if (response.info === "Already monitored"){ console.log("Warning: ID: "+ response.id + " Node is already monitored"); } else console.log("OK: ID:" + response.id + " Node is added"); }); } }); req.write(JSON.stringify(payload)); req.end(); } function addNodesFromFile(fileName) { console.log("Reading file and adding nodes..."); const rl = readline.createInterface({ input: fs.createReadStream(fileName), crlfDelay: Infinity }); let header; rl.on('line', line => { if (header == null) { header = line.split(','); } else { const properties = line.split(','), data = { customFields: {} }; header.forEach((name, ix) => { if (properties[ix] || "" !== "") { if (name === "Location") { data.customFields.Location = properties[ix]; } else if (name === "Info 2") { data.customFields["Info 2"] = properties[ix]; } else { data[name] = properties[ix]; } } }); sendRequest(data); } }); } addNodesFromFile(nodesFile);

Plik danych

data.csv

dnsname,networkAddress,osMonitorType,Location,Info 2
vm-test-0066.ac.acme,10.20.16.66,Windows,Server-Rack-1,VM-For-Testing
vm-test-0084.ac.acme,10.20.16.84,Windows,Server-Rack-2,VM-For-Testing
cam-0015.ac.acme,10.20.16.15,none,Server-Room,Camera
cam-0057.ac.acme,10.20.16.57,none,Office,Camera