From f1cb4443aede6d4657bdc3396c8914d3a9f4fa93 Mon Sep 17 00:00:00 2001
From: Alejandro Acuña <alejandro.acuna@aluvisagrupo.com>
Date: Mon, 11 Nov 2024 13:09:35 +0000
Subject: [PATCH] bck
---
libraries/server/src/art/servers/Model.java | 319 +++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 311 insertions(+), 8 deletions(-)
diff --git a/libraries/server/src/art/servers/Model.java b/libraries/server/src/art/servers/Model.java
index 804a5af..886b8b3 100644
--- a/libraries/server/src/art/servers/Model.java
+++ b/libraries/server/src/art/servers/Model.java
@@ -1,5 +1,6 @@
package art.servers;
+import art.library.gui.flat.FlatDialog;
import art.library.interop.serialization.Serialization;
import art.library.model.devices.Device;
import art.library.model.devices.DeviceAction;
@@ -10,6 +11,8 @@
import art.library.model.devices.DeviceRealtime;
import art.library.model.devices.DeviceSymbol;
import art.library.model.devices.application.Application;
+import art.library.model.devices.colors.controller.RTZ32.types.eventstrolley.EventTrolley;
+import art.library.model.devices.colors.controller.RTZ32.types.eventstrolley.EventTrolleyResult;
import art.library.model.transactions.traces.Trace;
import art.library.model.transactions.traces.TracePersistance;
import art.library.model.transactions.traces.TraceResult;
@@ -19,6 +22,8 @@
import art.servers.configuration.Configuration;
import java.io.File;
import java.io.FileOutputStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.nio.file.Files;
@@ -150,7 +155,11 @@
}
catch (Exception exception)
{
- Shared.println(Shared.getMessage("Model"), exception);
+ exception.printStackTrace();
+ StringWriter sw = new StringWriter();
+ exception.printStackTrace(new PrintWriter(sw));
+ FlatDialog.showDialog(null, Shared.getMessage("Error"), exception.getMessage() + "\n\n" + sw.toString(), true, FlatDialog.DIALOG_INFORMATION);
+ System.exit(0);
}
@@ -181,7 +190,10 @@
catch (Exception exception)
{
exception.printStackTrace();
- Shared.println(Shared.getMessage("Model"), exception);
+ StringWriter sw = new StringWriter();
+ exception.printStackTrace(new PrintWriter(sw));
+ FlatDialog.showDialog(null, Shared.getMessage("Error"), exception.getMessage() + "\n\n" + sw.toString(), true, FlatDialog.DIALOG_INFORMATION);
+ System.exit(0);
}
@@ -459,6 +471,30 @@
mutexListDevices.releaseRead();
}
}
+
+
+
+
+ public Device[] getDevicesCopy()
+ {
+ mutexListDevices.lockRead();
+
+ try
+ {
+ List<Device> result = new ArrayList<Device>();
+ for (Device device : ldevice)
+ {
+ Device clone = Serialization.clone(device);
+ clone.realtime = device.getDeviceRealtime();
+ result.add(clone);
+ }
+ return result.toArray(new Device[result.size()]);
+ }
+ finally
+ {
+ mutexListDevices.releaseRead();
+ }
+ }
@@ -938,8 +974,10 @@
}
else
{
+ System.out.println("3.UpdateDevice: " + currentDevice);
if (currentDevice.updateDevice(device) == true)
{
+ System.out.println("4.UpdateDevice: " + currentDevice);
if (Shared.configuration.database != null)
{
Shared.controllerDatabase.timeless_updateOrAddObject(new DevicePersistenceTimeless(device));
@@ -1062,6 +1100,61 @@
+ public void forceUpdateDeviceStatus(Device device, long timestamp)
+ {
+ try
+ {
+ device.forceLastTimestampStatusUpdate(timestamp);
+ if (Shared.configuration.database != null)
+ {
+ try
+ {
+ Shared.controllerDatabase.historical_updateOrAddObject(new DevicePersistenceHistorical(device));
+ }
+ catch (org.postgresql.util.PSQLException exception)
+ {
+ if ((exception.getMessage().toUpperCase().indexOf("NO PARTITION OF RELATION") > -1) || (exception.getMessage().toUpperCase().indexOf("NO SE ENCONTRÓ UNA PARTICIÓN") > -1))
+ {
+ Calendar calendar1 = Calendar.getInstance();
+ calendar1.setTimeInMillis(device.getLastTimestampUpdate());
+ calendar1.set(Calendar.DATE, 1);
+ calendar1.set(Calendar.HOUR_OF_DAY, 0);
+ calendar1.set(Calendar.MINUTE, 0);
+ calendar1.set(Calendar.SECOND, 0);
+ calendar1.set(Calendar.MILLISECOND, 0);
+
+ SimpleDateFormat formato1 = new SimpleDateFormat("yyyy_MM");
+
+ String tablename = "devices_" + formato1.format(calendar1.getTimeInMillis());
+ long startdate = calendar1.getTimeInMillis();
+ calendar1.add(Calendar.MONTH, 1);
+ long enddate = calendar1.getTimeInMillis();
+
+ String query1 = "CREATE TABLE IF NOT EXISTS " + tablename + " PARTITION OF devices FOR VALUES FROM ('" + startdate + "') TO ('" + enddate + "')";
+ try{Shared.controllerDatabase.historical_update(query1);} catch (Exception e){};
+ executeAlterTableDevicesVacuum(true, tablename);
+
+ // Do again the insert
+
+ try
+ {
+ Shared.controllerDatabase.historical_updateOrAddObject(new DevicePersistenceHistorical(device));
+ }
+ catch (Exception e)
+ {
+ }
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ }
+ }
+
+
+
+
public void updateDevice(Device[] ldevice)
{
mutexListDevices.lockWrite();
@@ -1123,9 +1216,6 @@
}
}
-
-
-
public Device cloneDevice(String identifier)
{
@@ -1278,6 +1368,158 @@
}
+
+ private String getFilterEventController(String filter)
+ {
+ /*
+
+ */
+ try
+ {
+ String result = filter;
+
+
+ return(result);
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+
+ return(filter);
+ }
+
+
+ public TraceResult getEventsController(String language, long timestampfrom, long timestampto, int type, int limit, int offset, String filter, boolean viewTrolleyEvents, boolean viewMasterSlaveEvents) throws Exception
+ {
+ ResultSet resultset = null;
+ Persistence persistence = Shared.controllerDatabase.getHistoricalPersistance().get(0);
+
+ TraceResult result = new TraceResult();
+ result.timestampfrom = timestampfrom;
+ result.timestampto = timestampto;
+ result.limit = limit;
+ result.offset = offset;
+ result.type = type;
+ result.traces = new ArrayList<Trace>();
+
+ try
+ {
+ String command = "SELECT COUNT(*) FROM traces WHERE timestamp >= " + timestampfrom + " AND timestamp < " + timestampto;
+ if (type > -1) command = command + " AND type = " + type;
+ // if (filter != null) command = command + " AND " + getFilterEventController(filter.substring(0, filter.indexOf("ORDER")));
+
+ resultset = persistence.executeQuery(command);
+
+ if (resultset.next())
+ {
+ result.total = resultset.getInt(1);
+ }
+ try{resultset.close();} catch (Exception e){};
+
+ command = "SELECT value FROM traces WHERE timestamp >= " + timestampfrom + " AND timestamp < " + timestampto;
+ if (type > -1) command = command + " AND type = " + type;
+// if (order == 1) command = command + " ORDER BY timestamp ASC";
+// else if (order == -1) command = command + " ORDER BY timestamp DESC";
+ command = command + " ORDER BY timestamp DESC";
+ // if (filter != null) command = command + " AND " + getFilterEventController(filter);
+ if (limit > 0) command = command + " LIMIT " + limit;
+ if (offset > -1) command = command + " OFFSET " + offset;
+
+ System.out.println(command);
+
+ resultset = persistence.executeQuery(command);
+
+ while (resultset.next())
+ {
+ TracePersistance tracePersistance = Serialization.deserialize(TracePersistance.class, resultset.getString(1));
+ if (tracePersistance.trace != null)
+ {
+ result.traces.add(tracePersistance.trace);
+ }
+ else
+ {
+ Trace trace = Serialization.deserialize(Trace.class, resultset.getString(1));
+ if (trace != null)
+ {
+ result.traces.add(trace);
+ }
+ }
+ }
+
+ return result;
+ }
+ finally
+ {
+ try{resultset.getStatement().close();} catch (Exception e){};
+ try{resultset.close();} catch (Exception e){};
+ }
+ }
+
+
+
+ public TraceResult getTraces(String language, long timestampfrom, long timestampto, int type, int limit, int offset, int order, boolean viewTrolleyEvents, boolean viewMasterSlaveEvents) throws Exception
+ {
+ ResultSet resultset = null;
+ Persistence persistence = Shared.controllerDatabase.getHistoricalPersistance().get(0);
+
+ TraceResult result = new TraceResult();
+ result.timestampfrom = timestampfrom;
+ result.timestampto = timestampto;
+ result.limit = limit;
+ result.offset = offset;
+ result.type = type;
+ result.traces = new ArrayList<Trace>();
+
+ try
+ {
+ String command = "SELECT COUNT(*) FROM traces WHERE timestamp >= " + timestampfrom + " AND timestamp < " + timestampto;
+ if (type > -1) command = command + " AND type = " + type;
+
+ resultset = persistence.executeQuery(command);
+
+ if (resultset.next())
+ {
+ result.total = resultset.getInt(1);
+ }
+ try{resultset.close();} catch (Exception e){};
+
+ command = "SELECT value FROM traces WHERE timestamp >= " + timestampfrom + " AND timestamp < " + timestampto;
+ if (type > -1) command = command + " AND type = " + type;
+ if (order == 1) command = command + " ORDER BY timestamp ASC";
+ else if (order == -1) command = command + " ORDER BY timestamp DESC";
+ if (limit > 0) command = command + " LIMIT " + limit;
+ if (offset > -1) command = command + " OFFSET " + offset;
+
+ System.out.println(command);
+
+ resultset = persistence.executeQuery(command);
+
+ while (resultset.next())
+ {
+ TracePersistance tracePersistance = Serialization.deserialize(TracePersistance.class, resultset.getString(1));
+ if (tracePersistance.trace != null)
+ {
+ result.traces.add(tracePersistance.trace);
+ }
+ else
+ {
+ Trace trace = Serialization.deserialize(Trace.class, resultset.getString(1));
+ if (trace != null)
+ {
+ result.traces.add(trace);
+ }
+ }
+ }
+
+ return result;
+ }
+ finally
+ {
+ try{resultset.getStatement().close();} catch (Exception e){};
+ try{resultset.close();} catch (Exception e){};
+ }
+ }
public TraceResult getTraces(TraceResult traceresult) throws Exception
@@ -1364,7 +1606,61 @@
// </editor-fold>
-
+
+
+
+
+ public EventTrolleyResult getEventsTrolley(String language, long timestampfrom, long timestampto, int type, int limit, int offset, int order) throws Exception
+ {
+ ResultSet resultset = null;
+ Persistence persistence = Shared.controllerDatabase.getHistoricalPersistance().get(0);
+
+ EventTrolleyResult result = new EventTrolleyResult();
+ result.timestampfrom = timestampfrom;
+ result.timestampto = timestampto;
+ result.limit = limit;
+ result.offset = offset;
+ result.type = type;
+ result.events = new ArrayList<EventTrolley>();
+
+ try
+ {
+ String command = "SELECT COUNT(*) FROM eventstrolley WHERE activation >= " + timestampfrom + " AND activation < " + timestampto;
+ if (type > -1) command = command + " AND type = " + type;
+
+ resultset = persistence.executeQuery(command);
+
+ if (resultset.next())
+ {
+ result.total = resultset.getInt(1);
+ }
+ try{resultset.close();} catch (Exception e){};
+
+ command = "SELECT value FROM eventstrolley WHERE activation >= " + timestampfrom + " AND activation < " + timestampto;
+ if (type > -1) command = command + " AND type = " + type;
+ if (order == 1) command = command + " ORDER BY activation ASC";
+ else if (order == -1) command = command + " ORDER BY activation DESC";
+ if (limit > 0) command = command + " LIMIT " + limit;
+ if (offset > -1) command = command + " OFFSET " + offset;
+
+ System.out.println(command);
+
+ resultset = persistence.executeQuery(command);
+
+ while (resultset.next())
+ {
+ result.events.add(((EventTrolley)Serialization.deserialize(EventTrolley.class, resultset.getString(1))));
+ }
+
+ return result;
+ }
+ finally
+ {
+ try{resultset.getStatement().close();} catch (Exception e){};
+ try{resultset.close();} catch (Exception e){};
+ }
+ }
+
// <editor-fold defaultstate="collapsed" desc="Symbols">
@@ -1374,7 +1670,8 @@
try
{
- for (int i=0; i<32; i++)
+ // for (int i=0; i<32; i++)
+ for (float i=0; i<32; i+=0.5f)
{
for (String symbolName : Shared.configuration.symbols)
{
@@ -1382,8 +1679,14 @@
symbol.type = deviceClassName;
symbol.name = symbolName;
symbol.zoom = i;
-
+ int zoom = (int)i;
String resourceName = "data/" + Shared.getApplicationName() + "/symbols/" + i + "/" + symbolName + ".svg";
+ if (zoom == i)
+ {
+ resourceName = "data/" + Shared.getApplicationName() + "/symbols/" + zoom + "/" + symbolName + ".svg";
+ }
+
+ // String resourceName = "data/" + Shared.getApplicationName() + "/symbols/" + i + "/" + symbolName + ".svg";
File file = new File(resourceName);
if (file.exists() == true)
--
Gitblit v1.10.0