Global update for storage and control

This commit is contained in:
Alexander Nozik 2017-05-17 22:55:17 +03:00
parent 4f0b12bbad
commit 4e5b3bb885
22 changed files with 184 additions and 214 deletions

View File

@ -1,50 +0,0 @@
package inr.numass.client;
import hep.dataforge.exceptions.StorageException;
import hep.dataforge.meta.Meta;
import hep.dataforge.storage.api.Loader;
import hep.dataforge.storage.api.Storage;
import hep.dataforge.storage.commons.AbstractStorage;
import java.io.IOException;
/**
* Created by darksnake on 09-Oct-16.
*/
public class RemoteNumassStorage extends AbstractStorage {
private NumassClient client;
private RemoteNumassStorage(Storage parent, String name, Meta annotation) {
super(parent, name, annotation);
}
public RemoteNumassStorage(String name) {
super(name);
}
private String getIP() {
return meta().getString("numass.server.ip", "192.168.111.1");
}
private int getPort() {
return meta().getInt("numass.server.port", 8335);
}
private NumassClient getClient() throws IOException {
if (client == null) {
client = new NumassClient(getIP(), getPort());
}
return client;
}
@Override
public Loader buildLoader(Meta loaderConfiguration) throws StorageException {
throw new UnsupportedOperationException();
}
@Override
public Storage buildShelf(String shelfName, Meta shelfConfiguration) throws StorageException {
return new RemoteNumassStorage(this, shelfName, shelfConfiguration);
}
}

View File

@ -15,7 +15,6 @@ class BoardView : View("Numass control board") {
deviceList = vbox {
bindChildren(controller.devices) { DeviceInfoView(it).root }
}
}
}

View File

@ -16,11 +16,11 @@
package inr.numass.cryotemp;
import hep.dataforge.context.Context;
import hep.dataforge.control.RoleDef;
import hep.dataforge.control.collectors.RegularPointCollector;
import hep.dataforge.control.connections.Roles;
import hep.dataforge.control.connections.StorageConnection;
import hep.dataforge.control.devices.PortSensor;
import hep.dataforge.control.devices.annotations.RoleDef;
import hep.dataforge.control.measurements.AbstractMeasurement;
import hep.dataforge.control.measurements.Measurement;
import hep.dataforge.control.ports.PortHandler;
@ -77,7 +77,7 @@ public class PKT8Device extends PortSensor<PKT8Result> {
public PKT8Device(Context context, Meta meta) {
setContext(context);
setMetaBase(meta);
setMeta(meta);
}
private PointLoader buildLoader(StorageConnection connection) {

View File

@ -16,11 +16,11 @@
package inr.numass.control.msp;
import hep.dataforge.context.Context;
import hep.dataforge.control.RoleDef;
import hep.dataforge.control.connections.Roles;
import hep.dataforge.control.connections.StorageConnection;
import hep.dataforge.control.devices.SingleMeasurementDevice;
import hep.dataforge.control.devices.annotations.RoleDef;
import hep.dataforge.control.devices.annotations.StateDef;
import hep.dataforge.control.devices.StateDef;
import hep.dataforge.control.measurements.AbstractMeasurement;
import hep.dataforge.control.measurements.Measurement;
import hep.dataforge.control.ports.PortHandler;
@ -75,7 +75,7 @@ public class MspDevice extends SingleMeasurementDevice implements PortHandler.Po
public MspDevice(Context context, Meta meta) {
setContext(context);
setMetaBase(meta);
setMeta(meta);
}
// public MspDevice(String name, Context context, Meta config) {

View File

@ -39,15 +39,18 @@ public class NumassControlUtils {
String numassRun = ClientUtils.getRunName(config);
config.getMetaList("storage").forEach(node -> {
device.getContext().getLogger().debug("Creating storage for device with meta: {}", node);
Storage storage = StorageFactory.buildStorage(device.getContext(), node);
if (!numassRun.isEmpty()) {
try {
storage = storage.buildShelf(numassRun, Meta.empty());
} catch (StorageException e) {
device.getContext().getLogger().error("Failed to build shelf", e);
//building storage in a separate thread
new Thread(() -> {
Storage storage = StorageFactory.buildStorage(device.getContext(), node);
if (!numassRun.isEmpty()) {
try {
storage = storage.buildShelf(numassRun, Meta.empty());
} catch (StorageException e) {
device.getContext().getLogger().error("Failed to build shelf", e);
}
}
}
device.connect(new StorageConnection(storage), Roles.STORAGE_ROLE);
device.connect(new StorageConnection(storage), Roles.STORAGE_ROLE);
}).start();
});
}
}

View File

@ -28,7 +28,7 @@ public class CM32Device extends PortSensor<Double> {
public CM32Device(Context context, Meta meta) {
setContext(context);
setMetaBase(meta);
setMeta(meta);
}
@Override

View File

@ -25,7 +25,7 @@ public class MKSBaratronDevice extends PortSensor<Double> {
public MKSBaratronDevice(Context context, Meta meta) {
setContext(context);
setMetaBase(meta);
setMeta(meta);
}

View File

@ -7,7 +7,7 @@ package inr.numass.readvac;
import hep.dataforge.context.Context;
import hep.dataforge.control.devices.PortSensor;
import hep.dataforge.control.devices.annotations.StateDef;
import hep.dataforge.control.devices.StateDef;
import hep.dataforge.control.measurements.Measurement;
import hep.dataforge.control.measurements.SimpleMeasurement;
import hep.dataforge.control.ports.PortHandler;
@ -35,7 +35,7 @@ public class MKSVacDevice extends PortSensor<Double> {
public MKSVacDevice(Context context, Meta meta) {
setContext(context);
setMetaBase(meta);
setMeta(meta);
}
private String talk(String requestContent) throws ControlException {

View File

@ -30,7 +30,7 @@ public class MeradatVacDevice extends PortSensor<Double> {
public MeradatVacDevice(Context context, Meta meta) {
setContext(context);
setMetaBase(meta);
setMeta(meta);
}
@Override

View File

@ -5,17 +5,19 @@
*/
package inr.numass.readvac;
import hep.dataforge.context.Context;
import hep.dataforge.control.RoleDef;
import hep.dataforge.control.collectors.PointCollector;
import hep.dataforge.control.collectors.ValueCollector;
import hep.dataforge.control.connections.Roles;
import hep.dataforge.control.connections.StorageConnection;
import hep.dataforge.control.devices.annotations.RoleDef;
import hep.dataforge.control.devices.annotations.StateDef;
import hep.dataforge.control.devices.StateDef;
import hep.dataforge.control.measurements.AbstractMeasurement;
import hep.dataforge.control.measurements.Measurement;
import hep.dataforge.control.measurements.Sensor;
import hep.dataforge.exceptions.ControlException;
import hep.dataforge.exceptions.MeasurementException;
import hep.dataforge.meta.Meta;
import hep.dataforge.storage.api.PointLoader;
import hep.dataforge.storage.commons.LoaderFactory;
import hep.dataforge.tables.DataPoint;
@ -45,6 +47,16 @@ import java.util.concurrent.TimeUnit;
public class VacCollectorDevice extends Sensor<DataPoint> {
private Map<String, Sensor<Double>> sensorMap = new LinkedHashMap<>();
private int delay = 5000;
public VacCollectorDevice() {
}
public VacCollectorDevice(Context context, Meta meta) {
setContext(context);
setMeta(meta);
}
public void setSensors(Iterable<Sensor<Double>> sensors) {
sensorMap = new LinkedHashMap<>();
@ -84,7 +96,7 @@ public class VacCollectorDevice extends Sensor<DataPoint> {
}
public void setDelay(int delay) throws MeasurementException {
getConfig().setValue("delay", delay);
this.delay = 5000;
if (isMeasuring()) {
getMeasurement().stop(false);
getMeasurement().start();
@ -119,7 +131,7 @@ public class VacCollectorDevice extends Sensor<DataPoint> {
sensorMap.values().forEach((sensor) -> {
try {
Object value;
if(sensor.optBooleanState("disabled").orElse(false)){
if (sensor.optBooleanState("disabled").orElse(false)) {
value = null;
} else {
value = sensor.read();
@ -129,7 +141,7 @@ public class VacCollectorDevice extends Sensor<DataPoint> {
collector.put(sensor.getName(), Value.NULL);
}
});
}, 0, meta().getInt("delay", 5000), TimeUnit.MILLISECONDS);
}, 0, delay, TimeUnit.MILLISECONDS);
}
@Override

View File

@ -38,8 +38,7 @@ public class VacDeviceFactory implements DeviceFactory<VacCollectorDevice> {
List<Sensor<Double>> sensors = config.getMetaList("sensor").stream()
.map(sensorConfig -> buildSensor(context, sensorConfig)).collect(Collectors.toList());
VacCollectorDevice collector = new VacCollectorDevice();
collector.configure(config);
VacCollectorDevice collector = new VacCollectorDevice(context, config);
collector.setSensors(sensors);
return collector;
}

View File

@ -24,11 +24,7 @@ public class NumassDataFactory extends DataFactory<NumassData> {
@Override
protected void buildChildren(Context context, DataTree.Builder<NumassData> builder, DataFilter filter, Meta meta) {
NumassStorage storage = NumassStorage.buildNumassRoot(
meta.getString("path"),
meta.getBoolean("readOnly", true),
meta.getBoolean("monitor", false)
);
NumassStorage storage = new NumassStorage(context,meta);
StorageUtils.loaderStream(storage).forEach(pair -> {
if (pair.getValue() instanceof NumassData) {
builder.putStatic(pair.getKey(), (NumassData) pair.getValue());

View File

@ -15,14 +15,13 @@
*/
package inr.numass.storage;
import hep.dataforge.context.Context;
import hep.dataforge.events.BasicEvent;
import hep.dataforge.events.EventBuilder;
import hep.dataforge.exceptions.StorageException;
import hep.dataforge.meta.Meta;
import hep.dataforge.meta.MetaBuilder;
import hep.dataforge.storage.filestorage.FilePointLoader;
import hep.dataforge.storage.filestorage.FileStorage;
import hep.dataforge.storage.filestorage.VFSUtils;
import inr.numass.data.NMFile;
import inr.numass.data.NumassData;
import org.apache.commons.io.FilenameUtils;
@ -35,7 +34,6 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
@ -56,87 +54,17 @@ public class NumassStorage extends FileStorage {
public static final String NUMASS_ZIP_EXTENSION = ".nm.zip";
public static final String NUMASS_DATA_LOADER_TYPE = "numassData";
public static final String GROUP_META_FILE = "numass_group_meta";
protected NumassStorage(FileStorage parent, String path, Meta config) throws StorageException {
super(parent, path, config);
super.refresh();
//TODO read meta from numass_group_meta to .numass element
}
protected NumassStorage(FileObject dir, Meta config) throws StorageException {
super(dir, config);
public NumassStorage(Context context, Meta config) throws StorageException {
super(context, config);
super.refresh();
}
/**
* Create root numass storage
*
* @param dir
* @param readOnly
* @return
* @throws StorageException
*/
public static NumassStorage buildLocalNumassRoot(File dir, boolean readOnly, boolean monitor) throws StorageException {
try {
Meta meta = new MetaBuilder("storage")
.setValue("type", "file.numass")
.setValue("readOnly", readOnly)
.setValue("monitor", monitor);
return new NumassStorage(VFSUtils.getLocalFile(dir), meta);
} catch (FileSystemException ex) {
throw new RuntimeException(ex);
}
}
public static NumassStorage buildLocalNumassRoot(File dir, boolean readOnly) throws StorageException {
return buildLocalNumassRoot(dir, readOnly, false);
}
public static NumassStorage buildRemoteNumassRoot(String ip, int port, String login, String password, String path) throws StorageException {
try {
Meta meta = new MetaBuilder("storage")
.setValue("type", "file.numass")
.setValue("readOnly", true)
.setValue("monitor", false);
return new NumassStorage(VFSUtils.getRemoteFile(ip, port, login, password, path), meta);
} catch (FileSystemException ex) {
throw new RuntimeException(ex);
}
}
public static NumassStorage buildNumassStorage(FileStorage parent, String path, boolean readOnly, boolean monitor) throws StorageException {
Meta meta = new MetaBuilder("storage")
.setValue("type", "file.numass")
.setValue("readOnly", readOnly)
.setValue("monitor", monitor);
return new NumassStorage(parent, path, meta);
}
public static NumassStorage buildNumassRoot(String uri, boolean readOnly, boolean monitor) {
try {
Meta meta = new MetaBuilder("storage")
.setValue("type", "file.numass")
.setValue("readOnly", readOnly)
.setValue("monitor", monitor);
return new NumassStorage(VFSUtils.getFile(uri), meta);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
public static NumassStorage buildNumassRoot(URI uri, boolean readOnly, boolean monitor) {
try {
Meta meta = new MetaBuilder("storage")
.setValue("type", "file.numass")
.setValue("readOnly", readOnly)
.setValue("monitor", monitor);
return new NumassStorage(VFSUtils.getFile(uri), meta);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
@Override
protected void updateDirectoryLoaders() {
try {

View File

@ -0,0 +1,90 @@
package inr.numass.storage;
import hep.dataforge.context.Context;
import hep.dataforge.meta.Meta;
import hep.dataforge.storage.api.Storage;
import hep.dataforge.storage.api.StorageType;
/**
* Created by darksnake on 17-May-17.
*/
public class NumassStorageFactory implements StorageType {
// /**
// * Create root numass storage
// *
// * @param dir
// * @param readOnly
// * @return
// * @throws StorageException
// */
// public static NumassStorage buildLocalNumassRoot(File dir, boolean readOnly, boolean monitor) throws StorageException {
// try {
// Meta meta = new MetaBuilder("storage")
// .setValue("type", "file.numass")
// .setValue("readOnly", readOnly)
// .setValue("monitor", monitor);
// return new NumassStorage(VFSUtils.getLocalFile(dir), meta);
// } catch (FileSystemException ex) {
// throw new RuntimeException(ex);
// }
// }
//
// public static NumassStorage buildLocalNumassRoot(File dir, boolean readOnly) throws StorageException {
// return buildLocalNumassRoot(dir, readOnly, false);
// }
//
// public static NumassStorage buildRemoteNumassRoot(String ip, int port, String login, String password, String path) throws StorageException {
// try {
// Meta meta = new MetaBuilder("storage")
// .setValue("type", "file.numass")
// .setValue("readOnly", true)
// .setValue("monitor", false);
// return new NumassStorage(VFSUtils.getRemoteFile(ip, port, login, password, path), meta);
// } catch (FileSystemException ex) {
// throw new RuntimeException(ex);
// }
// }
//
// public static NumassStorage buildNumassStorage(FileStorage parent, String path, boolean readOnly, boolean monitor) throws StorageException {
// Meta meta = new MetaBuilder("storage")
// .setValue("type", "file.numass")
// .setValue("readOnly", readOnly)
// .setValue("monitor", monitor);
// return new NumassStorage(parent, path, meta);
// }
//
// public static NumassStorage buildNumassRoot(String uri, boolean readOnly, boolean monitor) {
// try {
// Meta meta = new MetaBuilder("storage")
// .setValue("type", "file.numass")
// .setValue("readOnly", readOnly)
// .setValue("monitor", monitor);
// return new NumassStorage(VFSUtils.getFile(uri), meta);
// } catch (Exception ex) {
// throw new RuntimeException(ex);
// }
// }
//
// public static NumassStorage buildNumassRoot(URI uri, boolean readOnly, boolean monitor) {
// try {
// Meta meta = new MetaBuilder("storage")
// .setValue("type", "file.numass")
// .setValue("readOnly", readOnly)
// .setValue("monitor", monitor);
// return new NumassStorage(VFSUtils.getFile(uri), meta);
// } catch (Exception ex) {
// throw new RuntimeException(ex);
// }
// }
@Override
public String type() {
return "numass";
}
@Override
public Storage build(Context context, Meta meta) {
return new NumassStorage(context, meta);
}
}

View File

@ -1,22 +0,0 @@
package inr.numass.actions;
import hep.dataforge.actions.OneToOneAction;
import hep.dataforge.context.Context;
import hep.dataforge.description.TypedActionDef;
import hep.dataforge.meta.Laminate;
import inr.numass.storage.NumassStorage;
import java.net.URI;
/**
* TODO generalize and move to dataforge-stoage
* Create a Storage from given URI object
* Created by darksnake on 29-Jan-17.
*/
@TypedActionDef(name = "buildStorage", inputType = URI.class, outputType = NumassStorage.class)
public class BuildStorageAction extends OneToOneAction<URI, NumassStorage> {
@Override
protected NumassStorage execute(Context context, String name, URI input, Laminate inputMeta) {
return NumassStorage.buildNumassRoot(input, inputMeta.getBoolean("readOnly", true), inputMeta.getBoolean("monitor", false));
}
}

View File

@ -24,6 +24,7 @@ import hep.dataforge.meta.Meta;
import hep.dataforge.meta.Metoid;
import hep.dataforge.storage.api.ObjectLoader;
import hep.dataforge.storage.api.StateLoader;
import hep.dataforge.storage.api.Storage;
import hep.dataforge.storage.commons.LoaderFactory;
import hep.dataforge.storage.commons.MessageFactory;
import hep.dataforge.values.Value;
@ -52,7 +53,7 @@ public class NumassRun implements Metoid, Responder {
/**
* The Numass storage for this run (it could be not root)
*/
private final NumassStorage storage;
private final Storage storage;
/**
* Default state loader for this run
@ -68,7 +69,7 @@ public class NumassRun implements Metoid, Responder {
// * A set with inverted order of elements (last note first)
// */
// private final Set<NumassNote> notes = new TreeSet<>((NumassNote o1, NumassNote o2) -> -o1.time().compareTo(o2.time()));
public NumassRun(String path, NumassStorage workStorage, MessageFactory factory) throws StorageException {
public NumassRun(String path, Storage workStorage, MessageFactory factory) throws StorageException {
this.storage = workStorage;
this.states = LoaderFactory.buildStateLoder(storage, RUN_STATE, null);
this.noteLoader = LoaderFactory.buildObjectLoder(storage, RUN_NOTES, null);
@ -167,7 +168,11 @@ public class NumassRun implements Metoid, Responder {
String filePath = message.meta().getString("path", "");
String fileName = message.meta().getString("name")
.replace(NumassStorage.NUMASS_ZIP_EXTENSION, "");// removing .nm.zip if it is present
storage.pushNumassData(filePath, fileName, Binary.readToBuffer(message.getData()));
if(storage instanceof NumassStorage) {
((NumassStorage) storage).pushNumassData(filePath, fileName, Binary.readToBuffer(message.getData()));
} else {
throw new StorageException("Storage does not support numass point push");
}
//TODO add checksum here
return factory.okResponseBase("numass.data.push.response", false, false).build();
} catch (StorageException | IOException ex) {
@ -181,7 +186,7 @@ public class NumassRun implements Metoid, Responder {
return storage.meta();
}
public NumassStorage getStorage() {
public Storage getStorage() {
return storage;
}

View File

@ -15,15 +15,17 @@
*/
package inr.numass.server;
import hep.dataforge.context.Context;
import hep.dataforge.context.Encapsulated;
import hep.dataforge.exceptions.StorageException;
import hep.dataforge.io.envelopes.Envelope;
import hep.dataforge.meta.Meta;
import hep.dataforge.meta.MetaBuilder;
import hep.dataforge.storage.api.StateLoader;
import hep.dataforge.storage.api.Storage;
import hep.dataforge.storage.commons.AbstractNetworkListener;
import hep.dataforge.storage.commons.LoaderFactory;
import hep.dataforge.storage.commons.StorageManager;
import hep.dataforge.storage.filestorage.FileStorage;
import inr.numass.storage.NumassStorage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -35,17 +37,17 @@ import java.io.IOException;
*
* @author darksnake
*/
public class NumassServer extends AbstractNetworkListener {
public class NumassServer extends AbstractNetworkListener implements Encapsulated {
public static final String DEFAULT_RUN_PATH = "default";
private final Logger logger = LoggerFactory.getLogger("NUMASS-STORAGE");
private RatpackServer ratpack;
private FileStorage root;
private NumassStorage root;
private StateLoader rootState;
private NumassRun run;
public NumassServer(FileStorage storage, Meta listenerConfig) {
public NumassServer(NumassStorage storage, Meta listenerConfig) {
super(listenerConfig);
init(storage);
}
@ -61,7 +63,7 @@ public class NumassServer extends AbstractNetworkListener {
*
* @param storage
*/
private void init(FileStorage storage) {
private void init(NumassStorage storage) {
new StorageManager().startGlobal();
this.root = storage;
try {
@ -90,10 +92,15 @@ public class NumassServer extends AbstractNetworkListener {
// );
}
private void startRun(Meta annotation) throws StorageException {
String path = annotation.getString("path", DEFAULT_RUN_PATH);
//Meta meta = annotation.getMeta("meta", null);
run = new NumassRun(path, NumassStorage.buildNumassStorage(root, path, false, true), getResponseFactory());
@Override
public Context getContext() {
return root.getContext();
}
private void startRun(Meta meta) throws StorageException {
String path = meta.getString("path", DEFAULT_RUN_PATH);
NumassStorage storage = root.buildShelf(path,meta);
run = new NumassRun(path, storage, getResponseFactory());
getRootState().setValue("numass.current.run", path);
}
@ -137,7 +144,8 @@ public class NumassServer extends AbstractNetworkListener {
*/
private void updateRun() throws StorageException {
String currentRun = getRootState().getString("numass.current.run", DEFAULT_RUN_PATH);
this.run = new NumassRun(currentRun, NumassStorage.buildNumassStorage(root, currentRun, false, true), getResponseFactory());
Storage storage = root.optShelf(currentRun).get();
this.run = new NumassRun(currentRun, storage, getResponseFactory());
}
/**

View File

@ -1,10 +1,11 @@
package inr.numass.server;
import hep.dataforge.context.Context;
import hep.dataforge.context.Global;
import hep.dataforge.io.MetaFileReader;
import hep.dataforge.meta.Meta;
import hep.dataforge.meta.SimpleConfigurable;
import inr.numass.storage.NumassStorage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
@ -18,17 +19,17 @@ public class ServerRunner extends SimpleConfigurable implements AutoCloseable {
public static final String SERVER_CONFIG_PATH = "numass-server.xml";
private static final String NUMASS_REPO_ELEMENT = "numass.repository";
private static final String LISTENER_ELEMENT = "listener";
private static final String NUMASS_REPO_PATH_PROPERTY = "numass.repository.path";
private final static Logger logger = LoggerFactory.getLogger("NUMASS-SERVER");
// private static final String NUMASS_REPO_PATH_PROPERTY = "numass.repository.path";
NumassStorage root;
NumassServer listener;
Context context = Global.getContext("NUMASS_SERVER");
public ServerRunner() throws IOException, ParseException {
// Global.instance().pluginManager().load(StorageManager.class);
File configFile = new File(SERVER_CONFIG_PATH);
if (configFile.exists()) {
logger.info("Trying to read server configuration from {}", SERVER_CONFIG_PATH);
context.getLogger().info("Trying to read server configuration from {}", SERVER_CONFIG_PATH);
configure(MetaFileReader.read(configFile));
}
}
@ -38,7 +39,7 @@ public class ServerRunner extends SimpleConfigurable implements AutoCloseable {
r.start();
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
logger.info("Shutting down");
LoggerFactory.getLogger("NUMASS-SERVER").info("Shutting down");
r.close();
}));
@ -51,15 +52,13 @@ public class ServerRunner extends SimpleConfigurable implements AutoCloseable {
}
public ServerRunner start() throws Exception {
String repoPath = meta().getString(NUMASS_REPO_PATH_PROPERTY, ".");
// Meta repoConfig = null;
// if (meta().hasMeta(NUMASS_REPO_ELEMENT)) {
// repoConfig = meta().getMeta(NUMASS_REPO_ELEMENT);
// }
logger.info("Initializing file storage in {}", repoPath);
root = NumassStorage.buildLocalNumassRoot(new File(repoPath), true, true);//in(new File(repoPath), repoConfig);
// String repoPath = meta().getString(NUMASS_REPO_PATH_PROPERTY, ".");
logger.info("Starting numass server");
Meta storageMeta = meta().getMetaOrEmpty(NUMASS_REPO_ELEMENT);
context.getLogger().info("Initializing file storage with meta: {}",storageMeta);
root = new NumassStorage(context,storageMeta);
context.getLogger().info("Starting numass server");
if (root != null) {
root.open();
Meta listenerConfig = null;
@ -69,9 +68,9 @@ public class ServerRunner extends SimpleConfigurable implements AutoCloseable {
listener = new NumassServer(root, listenerConfig);
listener.open();
logger.info("Successfully started numass server");
context.getLogger().info("Successfully started numass server");
} else {
logger.error("Root storage not initialized");
context.getLogger().error("Root storage not initialized");
}
return this;
@ -79,12 +78,12 @@ public class ServerRunner extends SimpleConfigurable implements AutoCloseable {
@Override
public void close() {
logger.info("Stopping numass server");
context.getLogger().info("Stopping numass server");
if (listener != null) {
try {
listener.close();
} catch (Exception e) {
logger.error("Failed to close listener", e);
context.getLogger().error("Failed to close listener", e);
}
}
@ -92,7 +91,7 @@ public class ServerRunner extends SimpleConfigurable implements AutoCloseable {
try {
root.close();
} catch (Exception ex) {
logger.error("Error while closing storage", ex);
context.getLogger().error("Error while closing storage", ex);
}
}
}

View File

@ -9,10 +9,10 @@ import hep.dataforge.context.Context;
import hep.dataforge.context.Global;
import hep.dataforge.server.ServerManager;
import hep.dataforge.storage.commons.StorageManager;
import hep.dataforge.storage.filestorage.FileStorageFactory;
import inr.numass.storage.NumassStorage;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStreamReader;
/**
@ -34,7 +34,7 @@ public class TestServer {
String path = "D:/temp/test";
context.getLogger().info("Starting test numass storage servlet in '{}'", path);
NumassStorage storage = NumassStorage.buildLocalNumassRoot(new File(path), true, true);
NumassStorage storage = new NumassStorage(context, FileStorageFactory.buildStorageMeta(path, true, true));
serverManager.addObject("numass", storage, NumassStorageHandler::new);
serverManager.startSetver();

View File

@ -27,8 +27,10 @@ dependencies {
compile 'org.controlsfx:controlsfx:8.40.12'
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:'1.1.2-2"
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:'1.1.2-3"
compile "no.tornado:tornadofx:1.7.4"
}
apply plugin: 'kotlin'

View File

@ -12,6 +12,7 @@ import hep.dataforge.meta.Metoid
import hep.dataforge.names.AlphanumComparator
import hep.dataforge.names.Named
import hep.dataforge.storage.api.Storage
import hep.dataforge.storage.filestorage.FileStorageFactory
import inr.numass.NumassProperties
import inr.numass.data.NumassData
import inr.numass.storage.NumassStorage
@ -134,7 +135,7 @@ class MainView : View() {
work.progress = -1.0
work.status = "Building numass storage tree..."
try {
val root = NumassStorage.buildNumassRoot(path, true, false)
val root = NumassStorage(context,FileStorageFactory.buildStorageMeta(path,true, true));
setRootStorage(root)
Platform.runLater { storagePathLabel.text = "Storage: " + path }
} catch (ex: Exception) {