Package com.davfx.ninio.script.util

Source Code of com.davfx.ninio.script.util.SnmpAvailable

package com.davfx.ninio.script.util;

import java.io.IOException;

import com.davfx.ninio.script.RegisteredFunctionsScriptRunner;
import com.davfx.ninio.script.ScriptFunction;
import com.davfx.ninio.snmp.Oid;
import com.davfx.ninio.snmp.Result;
import com.davfx.ninio.snmp.SnmpClientHandler;
import com.davfx.ninio.snmp.util.SnmpClientCache;
import com.davfx.util.ConfigUtils;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;

public final class SnmpAvailable {
  public static final String CALL_FUNCTION_NAME = ConfigUtils.load(SnmpAvailable.class).getString("script.functions.snmp");

  private final SnmpClientCache client;

  public SnmpAvailable(SnmpClientCache client) {
    this.client = client;
  }
 
  public RegisteredFunctionsScriptRunner register(RegisteredFunctionsScriptRunner runner) {
    runner.register(CALL_FUNCTION_NAME, new ScriptFunction<JsonElement>() {
      private String getString(JsonObject r, String key, String defaultValue) {
        JsonElement e = r.get(key);
        if (e == null) {
          return defaultValue;
        }
        return e.getAsString();
      }
      @Override
      public void call(JsonElement request, ScriptFunction.Callback<JsonElement> userCallback) {
        JsonObject r = request.getAsJsonObject();
       
        String host = getString(r, "host", "localhost");
        SnmpClientCache.Connectable c = client.get(host);

        String oidAsString = getString(r, "oid", null);
        if (oidAsString == null) {
          JsonObject rr = new JsonObject();
          rr.add("error", new JsonPrimitive(new IOException("OID cannot be null").getMessage()));
          userCallback.handle(rr);
          return;
        }
        Oid oid;
        try {
          oid = new Oid(oidAsString);
        } catch (Exception e) {
          JsonObject rr = new JsonObject();
          rr.add("error", new JsonPrimitive(new IOException("Invalid OID", e).getMessage()));
          userCallback.handle(rr);
          return;
        }
        c.connect(new SnmpClientHandler() {
          @Override
          public void failed(IOException e) {
            JsonObject r = new JsonObject();
            r.add("error", new JsonPrimitive(e.getMessage()));
            userCallback.handle(r);
          }
          @Override
          public void close() {
          }
          @Override
          public void launched(Callback callback) {
            callback.get(oid, new SnmpClientHandler.Callback.GetCallback() {
              @Override
              public void failed(IOException e) {
                JsonObject r = new JsonObject();
                r.add("error", new JsonPrimitive(e.getMessage()));
                userCallback.handle(r);
              }
              private void add(JsonArray a, Result result) {
                JsonObject r = new JsonObject();
                r.add("oid", new JsonPrimitive(result.getOid().toString()));
                r.add("value", new JsonPrimitive(result.getValue().asString()));
                a.add(r);
              }
              @Override
              public void finished(Iterable<Result> results) {
                JsonArray a = new JsonArray();
                for (Result result : results) {
                  add(a, result);
                }
                userCallback.handle(a);
              }
              @Override
              public void finished(Result result) {
                JsonArray a = new JsonArray();
                add(a, result);
                userCallback.handle(a);
              }
            });
          }
        });
      }
    });
   
    return runner;
  }
}
TOP

Related Classes of com.davfx.ninio.script.util.SnmpAvailable

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.