diff --git a/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/AdministrationTopComponent.java b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/AdministrationTopComponent.java index 0eb356c32..bec3b0b6a 100644 --- a/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/AdministrationTopComponent.java +++ b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/AdministrationTopComponent.java @@ -44,11 +44,6 @@ ) @TopComponent.Registration(mode = "editor", openAtStartup = false) @ActionID(category = "Window", id = "org.janelia.workstation.admin.AdministrationTopComponent") -@ActionReference(path = "Menu/Window/Core", position = 10) -@TopComponent.OpenActionRegistration( - displayName = "#CTL_AdministrationTopComponentAction", - preferredID = AdministrationTopComponent.PREFERRED_ID -) @Messages({ "CTL_AdministrationTopComponentAction=Administration Tool", "CTL_AdministrationTopComponent=" + AdministrationTopComponent.LABEL_TEXT, diff --git a/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/RetrieveLogsPanel.java b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/RetrieveLogsPanel.java index 62d807fa7..f6de83f29 100644 --- a/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/RetrieveLogsPanel.java +++ b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/RetrieveLogsPanel.java @@ -29,6 +29,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; /** @@ -140,11 +141,15 @@ public void actionPerformed(ActionEvent ae) { null, null, AccessManager.getSubjectKey()); try { BufferedWriter writer = new BufferedWriter(new FileWriter(fileOutputLocation.getText())); - for(TmOperation log: logs) { - writer.write(log.getTimestamp().toString() + "," + - log.getWorkspaceId() + "," + log.getNeuronId() + "," + - log.getUser() + "," + log.getActivity() + "," + - log.getElapsedTime()); + for (TmOperation log : logs) { + writer.write( + Objects.toString(log.getTimestamp(), "") + "," + + Objects.toString(log.getWorkspaceId(), "") + "," + + Objects.toString(log.getNeuronId(), "") + "," + + Objects.toString(log.getUser(), "") + "," + + Objects.toString(log.getActivity(), "") + "," + + Objects.toString(log.getElapsedTime(), "") + ); writer.newLine(); } writer.close(); diff --git a/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/nb_actions/OpenAdminPanelAction.java b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/nb_actions/OpenAdminPanelAction.java new file mode 100644 index 000000000..339767a3b --- /dev/null +++ b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/nb_actions/OpenAdminPanelAction.java @@ -0,0 +1,53 @@ +package org.janelia.workstation.admin.nb_actions; +import java.awt.event.ActionEvent; + +import org.janelia.workstation.admin.AdministrationTopComponent; +import org.janelia.workstation.core.api.AccessManager; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.util.HelpCtx; +import org.openide.util.NbBundle.Messages; +import org.openide.util.actions.SystemAction; +import org.slf4j.LoggerFactory; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; + +@ActionID( + category = "Window", + id = "org.janelia.workstation.admin.OpenAdminTopComponentAction" +) +@ActionRegistration( + displayName = "#CTL_AdministrationTopComponentAction", + lazy = false +) +@Messages("CTL_AdministrationTopComponentAction=Administration Tool") +public final class OpenAdminPanelAction extends SystemAction { + + @Override + public String getName() { + return "Administration Tool"; + } + + @Override + public HelpCtx getHelpCtx() { + return null; + } + + @Override + public void actionPerformed(ActionEvent e) { + if (AccessManager.getAccessManager().isAdmin()) { + TopComponent win = WindowManager.getDefault() + .findTopComponent(AdministrationTopComponent.PREFERRED_ID); + if (win != null) { + win.open(); + win.requestActive(); + } + } else { + // either silently disable, or tell the user + LoggerFactory.getLogger(getClass()) + .warn("Non-admin attempted to open Administration Tool"); + } + } +} + diff --git a/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/nb_actions/OpenAdminPanelActionBuilder.java b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/nb_actions/OpenAdminPanelActionBuilder.java new file mode 100644 index 000000000..eb25b3b1d --- /dev/null +++ b/modules/AdministrationGUI/src/main/java/org/janelia/workstation/admin/nb_actions/OpenAdminPanelActionBuilder.java @@ -0,0 +1,22 @@ +package org.janelia.workstation.admin.nb_actions; + +import javax.swing.Action; + +import org.janelia.workstation.common.nb_action.RunAsMenuAction; +import org.janelia.workstation.integration.spi.actions.AdminActionBuilder; +import org.openide.util.actions.SystemAction; +import org.openide.util.lookup.ServiceProvider; + +/** + * Builds the admin menu item for launching the Admin GUI. + * + * @author David Schauder + */ +@ServiceProvider(service = AdminActionBuilder.class, position=1) +public final class OpenAdminPanelActionBuilder implements AdminActionBuilder { + @Override + public Action getAction() { + return SystemAction.get(OpenAdminPanelAction.class); + } +} + diff --git a/modules/HortaTracer/src/main/java/org/janelia/horta/NeuronTracerTopComponent.java b/modules/HortaTracer/src/main/java/org/janelia/horta/NeuronTracerTopComponent.java index 5760fb28f..db23750d8 100644 --- a/modules/HortaTracer/src/main/java/org/janelia/horta/NeuronTracerTopComponent.java +++ b/modules/HortaTracer/src/main/java/org/janelia/horta/NeuronTracerTopComponent.java @@ -117,12 +117,7 @@ import org.janelia.jacsstorage.clients.api.http.ClientProxy; import org.janelia.model.domain.DomainConstants; import org.janelia.model.domain.enums.FileType; -import org.janelia.model.domain.tiledMicroscope.TmColorModel; -import org.janelia.model.domain.tiledMicroscope.TmGeoAnnotation; -import org.janelia.model.domain.tiledMicroscope.TmNeuronMetadata; -import org.janelia.model.domain.tiledMicroscope.TmObjectMesh; -import org.janelia.model.domain.tiledMicroscope.TmSample; -import org.janelia.model.domain.tiledMicroscope.TmWorkspace; +import org.janelia.model.domain.tiledMicroscope.*; import org.janelia.rendering.RenderedVolumeLoader; import org.janelia.rendering.RenderedVolumeLoaderImpl; import org.janelia.scenewindow.OrbitPanZoomInteractor; @@ -132,6 +127,7 @@ import org.janelia.scenewindow.fps.FrameTracker; import org.janelia.workstation.common.actions.CopyToClipboardAction; import org.janelia.workstation.controller.NeuronManager; +import org.janelia.workstation.controller.TmViewerManager; import org.janelia.workstation.controller.ViewerEventBus; import org.janelia.workstation.controller.access.ModelTranslation; import org.janelia.workstation.controller.action.AddEditNoteAction; @@ -1356,8 +1352,12 @@ public void actionPerformed(ActionEvent e) { viewMenu.add(new AbstractAction("Recenter on This 3D Position [left-click]") { @Override public void actionPerformed(ActionEvent e) { + long startTime = System.currentTimeMillis(); PerspectiveCamera pCam = (PerspectiveCamera) sceneWindow.getCamera(); neuronTraceLoader.animateToFocusXyz(mouseStageLocation, pCam.getVantage(), 150); + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.RECENTER_3D_VIEW, + null, endTime-startTime); } }); } @@ -1782,6 +1782,7 @@ public void actionPerformed(ActionEvent e) { topMenu.add(new AbstractAction("Center on Current Anchor") { @Override public void actionPerformed(ActionEvent e) { + long startTime = System.currentTimeMillis(); PerspectiveCamera pCam = (PerspectiveCamera) sceneWindow.getCamera(); float[] vtxLocation = TmModelManager.getInstance().getLocationInMicrometers(vertex.getX(), vertex.getY(), vertex.getZ()); @@ -1792,6 +1793,9 @@ public void actionPerformed(ActionEvent e) { null, false); setSampleLocation(event); + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.CENTER_CURRENT_ANCHOR, + null, endTime-startTime); } }); @@ -1833,24 +1837,36 @@ public void actionPerformed(ActionEvent e) { topMenu.add(new AbstractAction("Set Vertex as Neuron Root") { @Override public void actionPerformed(ActionEvent e) { + long startTime = System.currentTimeMillis(); RerootNeuronAction action = new RerootNeuronAction(); action.execute(vertex.getNeuronId(), vertex.getId()); + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.SET_VERTEX_NEURON_ROOT, + null, endTime-startTime); } }); topMenu.add(new AbstractAction("Split Neuron Edge Between Vertices") { @Override public void actionPerformed(ActionEvent e) { + long startTime = System.currentTimeMillis(); SplitNeuronBetweenVerticesAction action = new SplitNeuronBetweenVerticesAction(); action.execute(vertex.getNeuronId(), vertex.getId()); + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.SPLIT_NEURON_EDGE_VERTICES, + null, endTime-startTime); } }); topMenu.add(new AbstractAction("Split Neurite At Vertex") { @Override public void actionPerformed(ActionEvent e) { + long startTime = System.currentTimeMillis(); SplitNeuronAtVertexAction action = new SplitNeuronAtVertexAction(); action.execute(vertex.getNeuronId(), vertex.getId()); + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.SPLIT_NEURITE_AT_VERTEX, + null, endTime-startTime); } }); } @@ -1875,10 +1891,14 @@ public void actionPerformed(ActionEvent e) { AbstractAction hideNeuronAction = new AbstractAction("Hide Neuron") { @Override public void actionPerformed(ActionEvent e) { + long startTime = System.currentTimeMillis(); TmModelManager.getInstance().getCurrentView().addAnnotationToHidden(indicatedNeuron.getId()); NeuronUpdateEvent updateEvent = new NeuronUpdateEvent( this, Arrays.asList(new TmNeuronMetadata[]{indicatedNeuron})); ViewerEventBus.postEvent(updateEvent); + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.HIDE_NEURON, + null, endTime-startTime); } }; topMenu.add(hideNeuronAction); @@ -1949,6 +1969,7 @@ public void actionPerformed(ActionEvent e) { topMenu.add(new AbstractAction("Merge neurites...") { @Override public void actionPerformed(ActionEvent e) { + interactorContext.mergeNeurites(); } }); diff --git a/modules/HortaTracer/src/main/java/org/janelia/horta/TracingInteractor.java b/modules/HortaTracer/src/main/java/org/janelia/horta/TracingInteractor.java index 2ac08e655..852067459 100644 --- a/modules/HortaTracer/src/main/java/org/janelia/horta/TracingInteractor.java +++ b/modules/HortaTracer/src/main/java/org/janelia/horta/TracingInteractor.java @@ -31,6 +31,8 @@ import javax.swing.event.MouseInputListener; import Jama.Matrix; +import org.janelia.model.domain.tiledMicroscope.*; +import org.janelia.workstation.controller.TmViewerManager; import org.janelia.workstation.controller.action.AnnotationSetRadiusAction; import org.janelia.workstation.controller.action.NeuronChooseColorAction; import org.janelia.workstation.controller.model.DefaultNeuron; @@ -45,8 +47,6 @@ import org.janelia.horta.actors.SpheresActor; import org.janelia.horta.actors.VertexHighlightActor; import org.janelia.horta.options.TileLoadingPanel; -import org.janelia.model.domain.tiledMicroscope.TmGeoAnnotation; -import org.janelia.model.domain.tiledMicroscope.TmWorkspace; import org.janelia.workstation.controller.NeuronManager; import org.janelia.workstation.controller.SpatialIndexManager; import org.janelia.workstation.controller.ViewerEventBus; @@ -58,8 +58,6 @@ import org.janelia.workstation.core.api.AccessManager; import org.janelia.workstation.core.keybind.KeymapUtil; import org.janelia.workstation.core.util.ConsoleProperties; -import org.janelia.model.domain.tiledMicroscope.TmNeuronMetadata; -import org.janelia.model.domain.tiledMicroscope.TmNeuronTagMap; import org.janelia.workstation.core.workers.SimpleWorker; import org.janelia.workstation.geom.Vec3; import org.janelia.workstation.integration.util.FrameworkAccess; @@ -323,8 +321,9 @@ public void mouseExited(MouseEvent event) { public boolean selectParentVertex(TmGeoAnnotation vertex, TmNeuronMetadata neuron) { + long startTime = System.currentTimeMillis(); if (vertex == null) return false; - + if (cachedParentVertex == vertex) return false; cachedParentVertex = vertex; @@ -378,6 +377,9 @@ public boolean selectParentVertex(TmGeoAnnotation vertex, TmNeuronMetadata neuro updateActorListener.neuronVertexUpdated(new VertexWithNeuron( vertex, neuron)); log.info("Horta parent vertex set"); + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.SELECT_VERTEX, + null, endTime-startTime); return true; } @@ -555,6 +557,7 @@ public void mouseDragged(MouseEvent event) return; } + long startTime = System.currentTimeMillis(); // log.info("Dragging a vertex"); // Update display (only) of dragged vertex // Update location of hover vertex glyph @@ -593,6 +596,10 @@ public void mouseDragged(MouseEvent event) event.consume(); // Don't let OrbitPanZoomInteractor drag the world // log.info("Consumed tracing drag event"); + + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.MOVE_VERTEX, + null, endTime-startTime); } @Override @@ -987,7 +994,7 @@ public boolean canCreateRootVertex() { } public boolean appendVertex() { - long beginAppendTime = System.nanoTime(); + long startTime = System.currentTimeMillis(); if (! canAppendVertex()) return false; if (!TmModelManager.checkOwnership( @@ -1009,6 +1016,9 @@ public boolean appendVertex() { FrameworkAccess.handleException(error); return false; } + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.APPEND_VERTEX, + null, endTime-startTime); return true; } @@ -1041,9 +1051,14 @@ public boolean canClearParent() { public void clearParent() { if (! canClearParent()) return; + + long startTime = System.currentTimeMillis(); clearParentVertex(); SelectionAnnotationEvent annEvent = new SelectionAnnotationEvent(this, null, false, true); + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.CLEAR_PARENT_ANCHOR, + null, endTime-startTime); ViewerEventBus.postEvent(annEvent); } @@ -1087,16 +1102,6 @@ public boolean canSplitNeurite() { if (TmModelManager.getInstance().getCurrentView().isProjectReadOnly()) return false; return true; } - - public boolean splitNeurite() { - if (!canSplitNeurite()) - return false; - if (!TmModelManager.checkOwnership(NeuronManager.getInstance().getNeuronFromNeuronID(hoveredVertex.getNeuronId()))) { - return false; - } - - return true; - } private List findAncestors(Long neuronId, TmGeoAnnotation vertex) { List ancestors = new ArrayList<>(); @@ -1124,6 +1129,7 @@ public boolean canMergeNeurite() { public boolean mergeNeurites() { if (!canMergeNeurite()) return false; + long startTime = System.currentTimeMillis(); if (hoveredNeuron == parentNeuron) { List targetAncestors = findAncestors(hoveredNeuron.getId(), hoveredVertex); List sourceAncestors = findAncestors(hoveredNeuron.getId(), parentVertex); @@ -1168,6 +1174,9 @@ public boolean mergeNeurites() { FrameworkAccess.handleException(error); return false; } + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.MERGE_NEURITES, + null, endTime-startTime); return true; } @@ -1205,6 +1214,7 @@ public void selectNeuron(TmNeuronMetadata neuron) { } public void selectParent() { + long startTime = System.currentTimeMillis(); TmModelManager.getInstance().getCurrentSelections().setCurrentNeuron(hoveredNeuron); TmModelManager.getInstance().getCurrentSelections().setCurrentVertex(hoveredVertex); SelectionAnnotationEvent event = new SelectionAnnotationEvent(this, @@ -1214,6 +1224,10 @@ public void selectParent() { selectParentVertex(hoveredVertex, hoveredNeuron); NeuronManager.getInstance().updateFragsByAnnotation(hoveredNeuron.getId(), hoveredVertex.getId()); + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.SELECT_VERTEX, + null, endTime-startTime); + } boolean canUpdateAnchorRadius() { diff --git a/modules/SceneWindow/src/main/java/org/janelia/scenewindow/OrbitPanZoomInteractor.java b/modules/SceneWindow/src/main/java/org/janelia/scenewindow/OrbitPanZoomInteractor.java index ce9046e7c..48dc2fe2b 100644 --- a/modules/SceneWindow/src/main/java/org/janelia/scenewindow/OrbitPanZoomInteractor.java +++ b/modules/SceneWindow/src/main/java/org/janelia/scenewindow/OrbitPanZoomInteractor.java @@ -23,6 +23,9 @@ import javax.swing.ImageIcon; import javax.swing.SwingUtilities; import javax.swing.event.MouseInputListener; + +import org.janelia.model.domain.tiledMicroscope.TmOperation; +import org.janelia.workstation.controller.TmViewerManager; import org.openide.util.Exceptions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -167,10 +170,14 @@ public void mouseDragged(MouseEvent event) { } // Middle drag to rotate else if (isRotateMode(event)) { + long startTime = System.currentTimeMillis(); if (camera.getVantage().isConstrainedToUpDirection()) bChanged = orbitPixels(dx, -dy, 6.0f); else bChanged = rotatePixels(dx, -dy, 6.0f); + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.ROTATE_SCREEN, + null, endTime-startTime); } } } diff --git a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/NeuronManager.java b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/NeuronManager.java index 8045a15f2..d01e5e9c5 100644 --- a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/NeuronManager.java +++ b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/NeuronManager.java @@ -494,7 +494,7 @@ public synchronized void changeNeuronOwner(List neuronList, Su } public synchronized void deleteNeuron(final TmNeuronMetadata deletedNeuron) { - + long startTime = System.currentTimeMillis(); // Update the UI first if (applyFilter) { // if filter, add and remove fragments as necessary @@ -517,6 +517,10 @@ public synchronized void deleteNeuron(final TmNeuronMetadata deletedNeuron) { FrameworkAccess.handleException(e); return null; }); + + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.DELETE_NEURON, + null, endTime-startTime); } /** @@ -1256,7 +1260,6 @@ public synchronized void deleteSubTree(final TmGeoAnnotation rootAnnotation) thr if (rootAnnotation == null) { return; } - final TmNeuronMetadata neuron = getNeuronFromNeuronID(rootAnnotation.getNeuronId()); TmModelManager.getInstance().getNeuronHistory().checkBackup(neuron); if (neuron == null) { diff --git a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/TmViewerManager.java b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/TmViewerManager.java index 27d7092a1..04a3777e1 100644 --- a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/TmViewerManager.java +++ b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/TmViewerManager.java @@ -26,6 +26,9 @@ import org.janelia.workstation.integration.util.FrameworkAccess; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.*; public class TmViewerManager implements GlobalViewerController { @@ -60,16 +63,19 @@ public void logOperation (TmOperation.Activity activity, Date timestamp, Long el if (!ApplicationPanel.isOperationsLogged()) { return; } - String timestampDate = null; - if (timestamp!=null) { - timestampDate = timestamp.toString(); - } Long workspaceId = null, sampleId = null; if (modelManager.getCurrentWorkspace()!=null) workspaceId = modelManager.getCurrentWorkspace().getId(); - tmDomainMgr.createOperationLog(modelManager.getCurrentSample().getId(), - workspaceId, null, - activity, timestampDate, elapsedTime, AccessManager.getSubjectKey()); + TmOperation newOperationLog = new TmOperation(); + newOperationLog.setActivity(activity); + newOperationLog.setTimestamp(timestamp); + newOperationLog.setElapsedTime(elapsedTime); + newOperationLog.setWorkspaceId(workspaceId); + if (modelManager.getCurrentSelections().getCurrentNeuron()!=null) + newOperationLog.setNeuronId(modelManager.getCurrentSelections().getCurrentNeuron().getId()); + if (modelManager.getCurrentSelections().getCurrentVertex()!=null) + newOperationLog.setVertexId(modelManager.getCurrentSelections().getCurrentVertex().getId()); + tmDomainMgr.createOperationLog(newOperationLog, AccessManager.getSubjectKey()); } @Subscribe diff --git a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeDomainMgr.java b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeDomainMgr.java index a1cf84b81..5252827c9 100644 --- a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeDomainMgr.java +++ b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeDomainMgr.java @@ -166,10 +166,10 @@ public List getOperationLogs (Long workspaceId, Long neuronId, Date return client.getOperationLogs(workspaceId, neuronId, startTime, endTime, subjectKey); } - public void createOperationLog (Long sampleId, Long workspaceId, Long neuronId, TmOperation.Activity activity, - String timestamp, Long elapsedTime, String subjectKey) { - LOG.debug("createOperationLog(activity={}, timestamp={}, elapsedTime={})",activity, timestamp, elapsedTime); - client.createOperationLog(sampleId, workspaceId, neuronId, activity, timestamp, elapsedTime, subjectKey); + public void createOperationLog (TmOperation operation, String subjectKey) { + LOG.debug("createOperationLog(activity={}, timestamp={}, elapsedTime={})",operation.getActivity(), + operation.getTimestamp(), operation.getElapsedTime()); + client.createOperationLog(operation, subjectKey); } public TmWorkspace createWorkspace(Long sampleId, String name) throws Exception { diff --git a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeRestClient.java b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeRestClient.java index eb338b110..3d65a0389 100644 --- a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeRestClient.java +++ b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/access/TiledMicroscopeRestClient.java @@ -156,20 +156,12 @@ public List getOperationLogs(Long workspaceId, Long neuronId, return response.readEntity(new GenericType>() {}); } - public void createOperationLog(Long sampleId, Long workspaceId, Long neuronId, - TmOperation.Activity activity, String timestamp, Long elapsedTime, + public void createOperationLog(TmOperation tmOperation, String subjectKey ) { - WebTarget target = getMouselightDataEndpoint("/operation/log") - .queryParam("username", subjectKey) - .queryParam("sampleId", sampleId) - .queryParam("workspaceId", workspaceId) - .queryParam("neuronId", neuronId) - .queryParam("activity", activity) - .queryParam("elapsedTime", elapsedTime) - .queryParam("timestamp", timestamp); + WebTarget target = getMouselightDataEndpoint("/operation/log"); Response response = target .request("application/json") - .get(); + .post(Entity.json(tmOperation)); checkBadResponse(target, response); } diff --git a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/DeleteNeuronSubtreeAction.java b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/DeleteNeuronSubtreeAction.java index 1484167eb..475e10017 100644 --- a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/DeleteNeuronSubtreeAction.java +++ b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/DeleteNeuronSubtreeAction.java @@ -2,7 +2,9 @@ import org.janelia.model.domain.tiledMicroscope.TmGeoAnnotation; import org.janelia.model.domain.tiledMicroscope.TmNeuronMetadata; +import org.janelia.model.domain.tiledMicroscope.TmOperation; import org.janelia.workstation.controller.NeuronManager; +import org.janelia.workstation.controller.TmViewerManager; import org.janelia.workstation.controller.model.TmModelManager; import org.janelia.workstation.core.workers.SimpleWorker; import org.janelia.workstation.integration.util.FrameworkAccess; @@ -44,10 +46,14 @@ public void actionPerformed(ActionEvent e) { } public void execute(Long neuronID, Long vertexID) { + long startTime = System.currentTimeMillis(); NeuronManager manager = NeuronManager.getInstance(); TmGeoAnnotation vertex = manager.getGeoAnnotationFromID(neuronID, vertexID); TmNeuronMetadata neuron = manager.getNeuronFromNeuronID(neuronID); deleteSubTree(neuron, vertex); + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.DELETE_NEURON_SUBTREE, + null, endTime-startTime); } public void deleteSubTree(TmNeuronMetadata neuron, TmGeoAnnotation vertex) { diff --git a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronCreateAction.java b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronCreateAction.java index b7b1d3c4c..43b3f3d70 100644 --- a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronCreateAction.java +++ b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronCreateAction.java @@ -8,7 +8,9 @@ import org.janelia.model.domain.tiledMicroscope.TmGeoAnnotation; import org.janelia.model.domain.tiledMicroscope.TmNeuronMetadata; +import org.janelia.model.domain.tiledMicroscope.TmOperation; import org.janelia.workstation.controller.NeuronManager; +import org.janelia.workstation.controller.TmViewerManager; import org.janelia.workstation.controller.action.EditAction; import org.janelia.workstation.controller.model.TmModelManager; import org.janelia.workstation.controller.model.annotations.neuron.NeuronModel; @@ -46,6 +48,7 @@ public void actionPerformed(ActionEvent e) { } private void createNeuron(boolean createInitVertex, Vec3 vertexLoc) { + long startTime = System.currentTimeMillis(); if (TmModelManager.getInstance().getCurrentWorkspace() == null) { // dialog? return; @@ -83,5 +86,8 @@ protected void hadError(Throwable t) { }; creator.execute(); } + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.CREATE_NEURON, + null, endTime-startTime); } } diff --git a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronDeleteAction.java b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronDeleteAction.java index e62b120e2..ce218d21d 100644 --- a/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronDeleteAction.java +++ b/modules/ViewerController/src/main/java/org/janelia/workstation/controller/action/NeuronDeleteAction.java @@ -1,7 +1,9 @@ package org.janelia.workstation.controller.action; import org.janelia.model.domain.tiledMicroscope.TmNeuronMetadata; +import org.janelia.model.domain.tiledMicroscope.TmOperation; import org.janelia.workstation.controller.NeuronManager; +import org.janelia.workstation.controller.TmViewerManager; import org.janelia.workstation.controller.model.TmModelManager; import org.janelia.workstation.core.api.AccessManager; import org.openide.awt.ActionID; @@ -34,6 +36,7 @@ public NeuronDeleteAction(TmNeuronMetadata targetNeuron) { @Override public void actionPerformed(ActionEvent e) { + long startTime = System.currentTimeMillis(); if (targetNeuron == null) { targetNeuron = TmModelManager.getInstance().getCurrentSelections().getCurrentNeuron(); if (targetNeuron == null) { @@ -64,5 +67,8 @@ public void actionPerformed(ActionEvent e) { NeuronManager.getInstance().deleteNeuron(targetNeuron); } this.targetNeuron = null; + long endTime = System.currentTimeMillis(); + TmViewerManager.getInstance().logOperation(TmOperation.Activity.DELETE_NEURON, + null, endTime-startTime); } } diff --git a/pom.xml b/pom.xml index 88ead4e39..c632dc82d 100644 --- a/pom.xml +++ b/pom.xml @@ -109,7 +109,7 @@ 9.4.46.v20220331 - 3.3.4 + 3.3.10 2.5.0