private void serviceDeliver(
      String targetId, HttpServletRequest httpRequest, HttpServletResponse httpResponse)
      throws ServletException, IOException {
    if (gateway.getClientDelegate(targetId) == null) {
      // Expired client tries to deliver without handshake
      httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED);
      return;
    }

    byte[] body = Utils.read(httpRequest.getInputStream());

    RHTTPResponse response = RHTTPResponse.fromFrameBytes(body);

    ExternalRequest externalRequest = gateway.removeExternalRequest(response.getId());
    if (externalRequest != null) {
      externalRequest.respond(response);
      logger.debug(
          "Deliver request from device {}, gateway request {}, response {}",
          new Object[] {targetId, externalRequest, response});
    } else {
      // We can arrive here for a race with the continuation expiration, which expired just before
      // the gateway client responded with a valid response; log this case ignore it.
      logger.debug(
          "Deliver request from device {}, missing gateway request, response {}",
          targetId,
          response);
    }
  }
  private void serviceHandshake(
      String targetId, HttpServletRequest httpRequest, HttpServletResponse httpResponse)
      throws IOException {
    ClientDelegate client = gateway.getClientDelegate(targetId);
    if (client != null)
      throw new IOException("Client with targetId " + targetId + " is already connected");

    client = gateway.newClientDelegate(targetId);
    ClientDelegate existing = gateway.addClientDelegate(targetId, client);
    if (existing != null)
      throw new IOException("Client with targetId " + targetId + " is already connected");

    flush(client, httpRequest, httpResponse);
  }
  private void serviceConnect(
      String targetId, HttpServletRequest httpRequest, HttpServletResponse httpResponse)
      throws IOException {
    unschedule(targetId);

    ClientDelegate client = gateway.getClientDelegate(targetId);
    if (client == null) {
      // Expired client tries to connect without handshake
      httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED);
      return;
    }

    flush(client, httpRequest, httpResponse);

    if (client.isClosed()) gateway.removeClientDelegate(targetId);
  }
 private void serviceDisconnect(
     String targetId, HttpServletRequest request, HttpServletResponse response) {
   // Do not remove the ClientDelegate from the gateway here,
   // since closing the ClientDelegate will resume the connect request
   // and we remove the ClientDelegate from the gateway there
   ClientDelegate client = gateway.getClientDelegate(targetId);
   if (client != null) client.close();
 }
 @Override
 public void run() {
   try {
     Thread.sleep(_delay);
     _zkServer.start();
   } catch (Exception e) {
     // ignore
   }
 }
 private void expireConnect(ClientDelegate client, long time) {
   String targetId = client.getTargetId();
   logger.info(
       "Client with targetId {} missing, last seen {} ms ago, closing it",
       targetId,
       System.currentTimeMillis() - time);
   client.close();
   // If the client expired, means that it did not connect,
   // so there no request to resume, and we cleanup here
   // (while normally this cleanup is done in serviceConnect())
   unschedule(targetId);
   gateway.removeClientDelegate(targetId);
 }
  private void publicaSensor(Gateway gateway, Sensor sensor) throws Exception {

    // make sure cookies is turn on
    CookieHandler.setDefault(new CookieManager());

    HTTPClient http = new HTTPClient();

    List<NameValuePair> postp = new ArrayList<>();
    postp.add(new BasicNameValuePair("login", "huberto"));
    postp.add(new BasicNameValuePair("password", "99766330"));

    http.sendPost(this.urlLogin, postp);

    List<NameValuePair> SensorParams = new ArrayList<>();
    SensorParams.add(new BasicNameValuePair("sensor_nome", sensor.getNome()));
    SensorParams.add(new BasicNameValuePair("sensor_desc", sensor.getDescricao()));
    SensorParams.add(new BasicNameValuePair("sensor_modelo", sensor.getModelo()));
    SensorParams.add(new BasicNameValuePair("sensor_precisao", sensor.getPrecisao()));
    SensorParams.add(new BasicNameValuePair("sensor_tipo", sensor.getTipo()));
    SensorParams.add(
        new BasicNameValuePair("sensor_servidorborda", Integer.toString(this.ServidorBordaID)));
    SensorParams.add(new BasicNameValuePair("sensor_gateway", Integer.toString(gateway.getId())));

    String result = http.GetPageContent(this.insertSensorURI, SensorParams);
    // System.out.println(result);
    String publicType = result.split(":")[0];
    String sensorID = result.split(":")[1];

    sensor.setId(Integer.parseInt(sensorID));

    if (null != publicType)
      switch (publicType) {
        case "insert":
          System.out.println(
              "-> Sensor "
                  + sensor.getNome()
                  + "("
                  + sensor.getId()
                  + ") cadastrado no Servidor de Contexto com sucesso.");
          break;
        case "update":
          System.out.println(
              "-> Sensor "
                  + sensor.getNome()
                  + "("
                  + sensor.getId()
                  + ") atualizado no Servidor de Contexto com sucesso.");
          break;
      }
  }
  private void toggleGateway(Gateway gateway, String job) throws Exception {
    CookieHandler.setDefault(new CookieManager());

    HTTPClient http = new HTTPClient();

    List<NameValuePair> postp = new ArrayList<>();
    postp.add(new BasicNameValuePair("login", "huberto"));
    postp.add(new BasicNameValuePair("password", "99766330"));

    http.sendPost(this.urlLogin, postp);

    List<NameValuePair> GatewayParams = new ArrayList<>();
    GatewayParams.add(new BasicNameValuePair("gateway_id", Integer.toString(gateway.getId())));
    GatewayParams.add(new BasicNameValuePair("job", job));

    String result = http.GetPageContent(this.toggleGateway, GatewayParams);

    if (null != result)
      switch (result) {
        case "desativado":
          System.out.println(
              "-> Gateway "
                  + gateway.getNome()
                  + "("
                  + gateway.getId()
                  + ") DESATIVADO no Servidor de Contexto");
          break;
        case "ativado":
          System.out.println(
              "-> Gateway "
                  + gateway.getNome()
                  + "("
                  + gateway.getId()
                  + ") ATIVADO no Servidor de Contexto");
          break;
      }
  }
예제 #9
0
  public void run() {
    // ///////////////////////////
    Gateway.addLiveThread(this);
    // ///////////////////////////
    while (Gateway.running) {
      try {
        pdud = (PDUData) fromSMSC.dequeue(); // blocks until having
        // an item
        // pdu = (PDU) fromSMSC.dequeue(); //blocks until having an item
        pdu = (PDU) pdud.getPDU();
        if (pdu.isRequest()) {
          this.RequestID = pdud.getRequestID();
          processRequest(pdu);
        }
      } catch (DBException ex) { // when lost connection to db
        Logger.error(this.getClass().getName(), "DBException: " + ex.getMessage());
        DBTools.ALERT(
            "RequestProcessor",
            "RequestProcessor",
            Constants.ALERT_WARN,
            Preference.Channel + "DBException: " + ex.getMessage(),
            Preference.ALERT_CONTACT);
        Logger.error(this.getClass().getName(), "Alert2YM DBException: " + ex.getMessage());
      } catch (Exception e) {
        Logger.error(this.getClass().getName(), "Exception: " + e.getMessage());

        DBTools.ALERT(
            "RequestProcessor",
            "RequestProcessor",
            Constants.ALERT_WARN,
            Preference.Channel + "Exception: " + e.getMessage(),
            Preference.ALERT_CONTACT);
      }

      try {
        Thread.sleep(50);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
    // /////////////////////////////
    Logger.info(this.getClass().getName(), "{" + this.getClass().getName() + " stopped}");
    this.destroy();
    // /////////////////////////////
  }
  private void publicaGateway(Gateway gateway) throws Exception {
    // make sure cookies is turn on
    CookieHandler.setDefault(new CookieManager());

    HTTPClient http = new HTTPClient();

    List<NameValuePair> postp = new ArrayList<>();
    postp.add(new BasicNameValuePair("login", "huberto"));
    postp.add(new BasicNameValuePair("password", "99766330"));

    http.sendPost(this.urlLogin, postp);

    List<NameValuePair> GatewayParams = new ArrayList<>();
    GatewayParams.add(new BasicNameValuePair("gateway_nome", gateway.getNome()));
    GatewayParams.add(
        new BasicNameValuePair("gateway_servidorborda", Integer.toString(this.ServidorBordaID)));
    GatewayParams.add(new BasicNameValuePair("gateway_uid", (String) gateway.getUid()));

    String result = http.GetPageContent(this.insertGatewayURI, GatewayParams);
    // System.out.println(result);

    String publicType = result.split(":")[0];
    String gatewayID = result.split(":")[1];

    gateway.setId(Integer.parseInt(gatewayID));

    if (null != publicType)
      switch (publicType) {
        case "insert":
          System.out.println(
              "-> Gateway "
                  + gateway.getNome()
                  + "("
                  + gateway.getId()
                  + ") cadastrado no Servidor de Contexto com sucesso.");
          break;
        case "update":
          System.out.println(
              "-> Gateway "
                  + gateway.getNome()
                  + "("
                  + gateway.getId()
                  + ") atualizado no Servidor de Contexto com sucesso.");
          toggleGateway(gateway, "activate");
          break;
      }
  }
예제 #11
0
  private void performStateRecovery(boolean enforceRecoverAfterTime, String reason) {
    final Gateway.GatewayStateRecoveredListener recoveryListener = new GatewayRecoveryListener();

    if (enforceRecoverAfterTime && recoverAfterTime != null) {
      if (scheduledRecovery.compareAndSet(false, true)) {
        logger.info("delaying initial state recovery for [{}]. {}", recoverAfterTime, reason);
        threadPool.schedule(
            recoverAfterTime,
            ThreadPool.Names.GENERIC,
            () -> {
              if (recovered.compareAndSet(false, true)) {
                logger.info(
                    "recover_after_time [{}] elapsed. performing state recovery...",
                    recoverAfterTime);
                gateway.performStateRecovery(recoveryListener);
              }
            });
      }
    } else {
      if (recovered.compareAndSet(false, true)) {
        threadPool
            .generic()
            .execute(
                new AbstractRunnable() {
                  @Override
                  public void onFailure(Exception e) {
                    logger.warn("Recovery failed", e);
                    // we reset `recovered` in the listener don't reset it here otherwise there
                    // might be a race
                    // that resets it to false while a new recover is already running?
                    recoveryListener.onFailure("state recovery failed: " + e.getMessage());
                  }

                  @Override
                  protected void doRun() throws Exception {
                    gateway.performStateRecovery(recoveryListener);
                  }
                });
      }
    }
  }
예제 #12
0
 public void destroy() {
   Gateway.removeThread(this);
 }
예제 #13
0
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    try {
      logger.debug("History Export Servlet called");

      String key = request.getParameter("key");
      logger.debug("Checking session for object with key " + key);

      EnergyDataHistoryQueryResult result =
          (EnergyDataHistoryQueryResult) request.getSession().getAttribute(key);

      // Cehck to see if the object exists
      if (result == null) {
        if (logger.isWarnEnabled()) logger.warn("Results not found for key " + key);
        response.setStatus(HttpServletResponse.SC_NOT_FOUND);
        PrintWriter out = response.getWriter();
        out.write("Gateway Not Found.");
        out.close();
        return;
      }

      StringBuilder fileNameBuilder = new StringBuilder();
      fileNameBuilder
          .append("export-")
          .append(result.getGroup().getDescription())
          .append("-")
          .append(result.getHistoryType())
          .append("-")
          .append(result.getStartTime())
          .append(".csv");

      String fileName = cleanFileName(fileNameBuilder.toString().toLowerCase());
      if (logger.isDebugEnabled()) logger.debug("Using filename " + fileName);

      response.setHeader("Content-Type", "text/csv");
      response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
      PrintWriter writer = response.getWriter();

      // Create the header

      writer.append("Date");
      writer.append(",");
      writer.append("Total Energy");
      writer.append(",");
      writer.append("Total Cost");
      for (Gateway g : result.getGatewayList()) {
        writer.append(",");
        writer
            .append(g.getDescription())
            .append(" (")
            .append(Long.toHexString(g.getId()).toUpperCase())
            .append(") Power");
        writer.append(",");
        writer
            .append(g.getDescription())
            .append(" (")
            .append(Long.toHexString(g.getId()).toUpperCase())
            .append(") Cost");
      }
      writer.append("\n");

      SimpleDateFormat dateFormat = getDateFormat(result.getHistoryType());
      DecimalFormat pwrFormat = new DecimalFormat("0.000");
      DecimalFormat cstFormat = new DecimalFormat("0.00");

      int index = 0;

      // Write each line of data.
      for (EnergyDataHistory history : result.getNetHistoryList()) {

        writer.append(dateFormat.format(history.getHistoryDate().getTime()));
        writer.append(",");
        writer.append(pwrFormat.format(history.getEnergy() / 1000.0));
        writer.append(",");
        writer.append(cstFormat.format(history.getCost()));

        for (Gateway g : result.getGatewayList()) {
          EnergyDataHistory gh = result.getGatewayHistoryList().get(g.getId()).get(index);

          writer.append(",");
          writer.append(pwrFormat.format(gh.getEnergy() / 1000.0));
          writer.append(",");
          writer.append(cstFormat.format(gh.getCost()));
        }

        writer.append("\n");

        index++;
      }

      writer.flush();
      writer.close();

      logger.debug("Clearing out session object");
      request.getSession().removeAttribute(key);

    } catch (Exception ex) {
      response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
      logger.error("Error parsing inbound xml:" + ex.getMessage(), ex);
    }
  }