You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by sh...@apache.org on 2018/09/21 13:39:29 UTC
incubator-unomi git commit: UNOMI-200 New Karaf shell commands for
events, sessions and profiles Also in this commit,
all existing commands have been prefixed using the unomi scope.
Repository: incubator-unomi
Updated Branches:
refs/heads/master b4b0560b4 -> 11c847c05
UNOMI-200 New Karaf shell commands for events, sessions and profiles
Also in this commit, all existing commands have been prefixed using the unomi scope.
Signed-off-by: Serge Huber <sh...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/incubator-unomi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-unomi/commit/11c847c0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-unomi/tree/11c847c0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-unomi/diff/11c847c0
Branch: refs/heads/master
Commit: 11c847c0594b63d96c550ab57abbad32d3ca109f
Parents: b4b0560
Author: Serge Huber <sh...@apache.org>
Authored: Fri Sep 21 15:39:22 2018 +0200
Committer: Serge Huber <sh...@apache.org>
Committed: Fri Sep 21 15:39:22 2018 +0200
----------------------------------------------------------------------
.../unomi/shell/commands/ActionListCommand.java | 2 +-
.../unomi/shell/commands/ActionViewCommand.java | 2 +-
.../unomi/shell/commands/EventTailCommand.java | 126 +++++++++++++++++++
.../unomi/shell/commands/EventViewCommand.java | 63 ++++++++++
.../shell/commands/ProfileListCommand.java | 75 +++++++++++
.../shell/commands/ProfileViewCommand.java | 49 ++++++++
.../unomi/shell/commands/RuleListCommand.java | 2 +-
.../shell/commands/RuleResetStatsCommand.java | 2 +-
.../unomi/shell/commands/RuleViewcommand.java | 2 +-
.../shell/commands/SegmentListCommand.java | 2 +-
.../shell/commands/SegmentViewCommand.java | 2 +-
.../shell/commands/SessionListCommand.java | 75 +++++++++++
.../shell/commands/SessionViewCommand.java | 48 +++++++
.../resources/OSGI-INF/blueprint/blueprint.xml | 39 +++++-
14 files changed, 476 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11c847c0/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ActionListCommand.java
----------------------------------------------------------------------
diff --git a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ActionListCommand.java b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ActionListCommand.java
index 74a4339..d6525ec 100644
--- a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ActionListCommand.java
+++ b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ActionListCommand.java
@@ -25,7 +25,7 @@ import org.apache.unomi.common.DataTable;
import java.util.ArrayList;
import java.util.Collection;
-@Command(scope = "action", name = "list", description = "This will list all the actions deployed in the Apache Unomi Context Server")
+@Command(scope = "unomi", name = "action-list", description = "This will list all the actions deployed in the Apache Unomi Context Server")
public class ActionListCommand extends ListCommandSupport {
private DefinitionsService definitionsService;
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11c847c0/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ActionViewCommand.java
----------------------------------------------------------------------
diff --git a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ActionViewCommand.java b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ActionViewCommand.java
index 3852fc0..9d1b820 100644
--- a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ActionViewCommand.java
+++ b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ActionViewCommand.java
@@ -23,7 +23,7 @@ import org.apache.unomi.api.actions.ActionType;
import org.apache.unomi.api.services.DefinitionsService;
import org.apache.unomi.persistence.spi.CustomObjectMapper;
-@Command(scope = "action", name = "view", description = "This will display a single action deployed in the Apache Unomi Context Server")
+@Command(scope = "unomi", name = "action-view", description = "This will display a single action deployed in the Apache Unomi Context Server")
public class ActionViewCommand extends OsgiCommandSupport {
private DefinitionsService definitionsService;
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11c847c0/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/EventTailCommand.java
----------------------------------------------------------------------
diff --git a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/EventTailCommand.java b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/EventTailCommand.java
new file mode 100644
index 0000000..4df6931
--- /dev/null
+++ b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/EventTailCommand.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.unomi.shell.commands;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.apache.unomi.api.Event;
+import org.apache.unomi.api.services.EventListenerService;
+import org.apache.unomi.api.services.EventService;
+import org.osgi.framework.ServiceRegistration;
+
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.Hashtable;
+import java.util.List;
+
+@Command(scope = "unomi", name = "event-tail", description = "This will tail all the events coming into the Apache Unomi Context Server")
+public class EventTailCommand extends OsgiCommandSupport {
+
+ @Argument(index = 0, name = "withInternal", description = "The identifier for the event", required = false, multiValued = false)
+ boolean withInternal = false;
+
+ int[] columnSizes = new int[] { 36, 14, 36, 36, 29, 15, 5 };
+ String[] columnHeaders = new String[] {
+ "ID",
+ "Type",
+ "Session",
+ "Profile",
+ "Timestamp",
+ "Scope",
+ "Persistent"
+ };
+
+ @Override
+ protected Object doExecute() throws Exception {
+ PrintStream out = session.getConsole();
+ out.flush();
+
+ TailEventListener tailEventListener = new TailEventListener(out);
+
+ StringBuilder headerLine = new StringBuilder();
+ for (int i=0; i < columnSizes.length; i++) {
+ headerLine.append(getColumn(columnSizes[i], columnHeaders[i]));
+ headerLine.append("|");
+ }
+ System.out.println(headerLine.toString());
+ System.out.println(StringUtils.repeat("-", headerLine.length()));
+ ServiceRegistration<EventListenerService> tailServiceRegistration = bundleContext.registerService(EventListenerService.class, tailEventListener, new Hashtable<>());
+ try {
+ synchronized (this) {
+ wait();
+ }
+ out.println("Stopping tail as log.core bundle was stopped.");
+ } catch (InterruptedException e) {
+ // Ignore as it will happen if the user breaks the tail using Ctrl-C
+ } finally {
+ tailServiceRegistration.unregister();
+ }
+ return null;
+ }
+
+ protected String getColumn(int columnSize, String columnContent) {
+ if (columnContent == null) {
+ columnContent = "null";
+ }
+ if (columnContent.length() == columnSize) {
+ return columnContent;
+ }
+ if (columnContent.length() < columnSize) {
+ return columnContent + StringUtils.repeat(" ", columnSize - columnContent.length());
+ }
+ return columnContent.substring(0, columnSize);
+ }
+
+ class TailEventListener implements EventListenerService {
+
+ PrintStream out;
+
+ public TailEventListener(PrintStream out) {
+ this.out = out;
+ }
+
+ @Override
+ public boolean canHandle(Event event) {
+ return true;
+ }
+
+ @Override
+ public int onEvent(Event event) {
+ if (!event.isPersistent() && !withInternal) {
+ return EventService.NO_CHANGE;
+ }
+ List<String> eventInfo = new ArrayList<>();
+ eventInfo.add(event.getItemId());
+ eventInfo.add(event.getEventType());
+ eventInfo.add(event.getSessionId());
+ eventInfo.add(event.getProfileId());
+ eventInfo.add(event.getTimeStamp().toString());
+ eventInfo.add(event.getScope());
+ eventInfo.add(Boolean.toString(event.isPersistent()));
+ StringBuilder eventLine = new StringBuilder();
+ for (int i=0; i < columnSizes.length; i++) {
+ eventLine.append(getColumn(columnSizes[i], eventInfo.get(i)));
+ eventLine.append("|");
+ }
+ System.out.println(eventLine.toString());
+ return EventService.NO_CHANGE;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11c847c0/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/EventViewCommand.java
----------------------------------------------------------------------
diff --git a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/EventViewCommand.java b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/EventViewCommand.java
new file mode 100644
index 0000000..9be10d5
--- /dev/null
+++ b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/EventViewCommand.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.unomi.shell.commands;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.apache.unomi.api.Event;
+import org.apache.unomi.api.PartialList;
+import org.apache.unomi.api.conditions.Condition;
+import org.apache.unomi.api.services.DefinitionsService;
+import org.apache.unomi.api.services.EventService;
+import org.apache.unomi.persistence.spi.CustomObjectMapper;
+
+@Command(scope = "unomi", name = "event-view", description = "This command will dump an Event as a JSON object")
+public class EventViewCommand extends OsgiCommandSupport {
+
+ private EventService eventService;
+ private DefinitionsService definitionsService;
+
+ public void setEventService(EventService eventService) {
+ this.eventService = eventService;
+ }
+
+ public void setDefinitionsService(DefinitionsService definitionsService) {
+ this.definitionsService = definitionsService;
+ }
+
+ @Argument(index = 0, name = "event", description = "The identifier for the event", required = true, multiValued = false)
+ String eventIdentifier;
+
+ @Override
+ protected Object doExecute() throws Exception {
+
+ Condition eventCondition = new Condition(definitionsService.getConditionType("eventPropertyCondition"));
+ eventCondition.setParameter("propertyName", "itemId");
+ eventCondition.setParameter("comparisonOperator", "equals");
+ eventCondition.setParameter("propertyValue", eventIdentifier);
+
+ PartialList<Event> matchingEvents = eventService.searchEvents(eventCondition, 0, 10);
+ if (matchingEvents == null || matchingEvents.getTotalSize() != 1) {
+ System.out.println("Couldn't find a single event with id=" + eventIdentifier + ". Maybe it wasn't a persistent event ?");
+ return null;
+ }
+ String jsonEvent = CustomObjectMapper.getObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(matchingEvents.get(0));
+ System.out.println(jsonEvent);
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11c847c0/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ProfileListCommand.java
----------------------------------------------------------------------
diff --git a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ProfileListCommand.java b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ProfileListCommand.java
new file mode 100644
index 0000000..7af8a49
--- /dev/null
+++ b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ProfileListCommand.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.unomi.shell.commands;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.unomi.api.PartialList;
+import org.apache.unomi.api.Profile;
+import org.apache.unomi.api.conditions.Condition;
+import org.apache.unomi.api.query.Query;
+import org.apache.unomi.api.services.DefinitionsService;
+import org.apache.unomi.api.services.ProfileService;
+import org.apache.unomi.common.DataTable;
+
+import java.util.ArrayList;
+
+@Command(scope = "unomi", name = "profile-list", description = "This commands lists the latest profiles updated in the Apache Unomi Context Server")
+public class ProfileListCommand extends ListCommandSupport {
+
+ private ProfileService profileService;
+ private DefinitionsService definitionsService;
+
+ public void setProfileService(ProfileService profileService) {
+ this.profileService = profileService;
+ }
+
+ public void setDefinitionsService(DefinitionsService definitionsService) {
+ this.definitionsService = definitionsService;
+ }
+
+ @java.lang.Override
+ protected String[] getHeaders() {
+ return new String[] {
+ "ID",
+ "Scope",
+ "Segments",
+ "Consents",
+ "Last modification",
+ };
+ }
+
+ @java.lang.Override
+ protected DataTable buildDataTable() {
+ Query query = new Query();
+ query.setSortby("properties.lastVisit:desc");
+ Condition matchAllCondition = new Condition(definitionsService.getConditionType("matchAllCondition"));
+ query.setCondition(matchAllCondition);
+ PartialList<Profile> lastModifiedProfiles = profileService.search(query, Profile.class);
+ DataTable dataTable = new DataTable();
+ for (Profile profile : lastModifiedProfiles.getList()) {
+ ArrayList<Comparable> rowData = new ArrayList<>();
+ rowData.add(profile.getItemId());
+ rowData.add(profile.getScope());
+ rowData.add(StringUtils.join(profile.getSegments(), ","));
+ rowData.add(StringUtils.join(profile.getConsents().keySet(), ","));
+ rowData.add((String) profile.getProperty("lastVisit"));
+ dataTable.addRow(rowData.toArray(new Comparable[rowData.size()]));
+ }
+ return dataTable;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11c847c0/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ProfileViewCommand.java
----------------------------------------------------------------------
diff --git a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ProfileViewCommand.java b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ProfileViewCommand.java
new file mode 100644
index 0000000..34b77e3
--- /dev/null
+++ b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/ProfileViewCommand.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.unomi.shell.commands;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.apache.unomi.api.Profile;
+import org.apache.unomi.api.services.ProfileService;
+import org.apache.unomi.persistence.spi.CustomObjectMapper;
+
+@Command(scope = "unomi", name = "profile-view", description = "This command will dump a profile as a JSON string")
+public class ProfileViewCommand extends OsgiCommandSupport {
+
+ private ProfileService profileService;
+
+ public void setProfileService(ProfileService profileService) {
+ this.profileService = profileService;
+ }
+
+ @Argument(index = 0, name = "profile", description = "The identifier for the profile", required = true, multiValued = false)
+ String profileIdentifier;
+
+ @Override
+ protected Object doExecute() throws Exception {
+ Profile profile = profileService.load(profileIdentifier);
+ if (profile == null) {
+ System.out.println("Couldn't find a profile with id=" + profileIdentifier);
+ return null;
+ }
+ String jsonProfile = CustomObjectMapper.getObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(profile);
+ System.out.println(jsonProfile);
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11c847c0/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleListCommand.java
----------------------------------------------------------------------
diff --git a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleListCommand.java b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleListCommand.java
index 5b0baf0..d7ce5c6 100644
--- a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleListCommand.java
+++ b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleListCommand.java
@@ -27,7 +27,7 @@ import java.util.ArrayList;
import java.util.Map;
import java.util.Set;
-@Command(scope = "rule", name = "list", description = "This will list all the rules deployed in the Apache Unomi Context Server")
+@Command(scope = "unomi", name = "rule-list", description = "This will list all the rules deployed in the Apache Unomi Context Server")
public class RuleListCommand extends ListCommandSupport {
private RulesService rulesService;
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11c847c0/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleResetStatsCommand.java
----------------------------------------------------------------------
diff --git a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleResetStatsCommand.java b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleResetStatsCommand.java
index eb50a15..3ab0b66 100644
--- a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleResetStatsCommand.java
+++ b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleResetStatsCommand.java
@@ -20,7 +20,7 @@ import org.apache.karaf.shell.commands.Command;
import org.apache.karaf.shell.console.OsgiCommandSupport;
import org.apache.unomi.api.services.RulesService;
-@Command(scope = "rule", name = "reset-stats", description = "This command will reset the rule statistics")
+@Command(scope = "unomi", name = "rule-reset-stats", description = "This command will reset the rule statistics")
public class RuleResetStatsCommand extends OsgiCommandSupport {
private RulesService rulesService;
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11c847c0/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleViewcommand.java
----------------------------------------------------------------------
diff --git a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleViewcommand.java b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleViewcommand.java
index 4f86f5e..c37a107 100644
--- a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleViewcommand.java
+++ b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/RuleViewcommand.java
@@ -23,7 +23,7 @@ import org.apache.unomi.api.rules.Rule;
import org.apache.unomi.api.services.RulesService;
import org.apache.unomi.persistence.spi.CustomObjectMapper;
-@Command(scope = "rule", name = "view", description = "This will allows to view a rule in the Apache Unomi Context Server")
+@Command(scope = "unomi", name = "rule-view", description = "This will allows to view a rule in the Apache Unomi Context Server")
public class RuleViewcommand extends OsgiCommandSupport {
private RulesService rulesService;
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11c847c0/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SegmentListCommand.java
----------------------------------------------------------------------
diff --git a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SegmentListCommand.java b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SegmentListCommand.java
index 75f3a67..858dc93 100644
--- a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SegmentListCommand.java
+++ b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SegmentListCommand.java
@@ -25,7 +25,7 @@ import org.apache.unomi.common.DataTable;
import java.util.ArrayList;
-@Command(scope = "segment", name = "list", description = "This will list all the segments present in the Apache Unomi Context Server")
+@Command(scope = "unomi", name = "segment-list", description = "This will list all the segments present in the Apache Unomi Context Server")
public class SegmentListCommand extends ListCommandSupport {
private SegmentService segmentService;
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11c847c0/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SegmentViewCommand.java
----------------------------------------------------------------------
diff --git a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SegmentViewCommand.java b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SegmentViewCommand.java
index ed448e4..3869e60 100644
--- a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SegmentViewCommand.java
+++ b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SegmentViewCommand.java
@@ -23,7 +23,7 @@ import org.apache.unomi.api.segments.Segment;
import org.apache.unomi.api.services.SegmentService;
import org.apache.unomi.persistence.spi.CustomObjectMapper;
-@Command(scope = "segment", name = "view", description = "This will allows to view a segment in the Apache Unomi Context Server")
+@Command(scope = "unomi", name = "segment-view", description = "This will allows to view a segment in the Apache Unomi Context Server")
public class SegmentViewCommand extends OsgiCommandSupport {
private SegmentService segmentService;
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11c847c0/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SessionListCommand.java
----------------------------------------------------------------------
diff --git a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SessionListCommand.java b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SessionListCommand.java
new file mode 100644
index 0000000..237712a
--- /dev/null
+++ b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SessionListCommand.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.unomi.shell.commands;
+
+import org.apache.karaf.shell.commands.Command;
+import org.apache.unomi.api.PartialList;
+import org.apache.unomi.api.Session;
+import org.apache.unomi.api.conditions.Condition;
+import org.apache.unomi.api.query.Query;
+import org.apache.unomi.api.services.DefinitionsService;
+import org.apache.unomi.api.services.ProfileService;
+import org.apache.unomi.common.DataTable;
+
+import java.util.ArrayList;
+
+@Command(scope = "unomi", name = "session-list", description = "This commands lists the latest sessions updated in the Apache Unomi Context Server")
+public class SessionListCommand extends ListCommandSupport {
+ private ProfileService profileService;
+ private DefinitionsService definitionsService;
+
+ public void setProfileService(ProfileService profileService) {
+ this.profileService = profileService;
+ }
+
+ public void setDefinitionsService(DefinitionsService definitionsService) {
+ this.definitionsService = definitionsService;
+ }
+
+ @java.lang.Override
+ protected String[] getHeaders() {
+ return new String[] {
+ "ID",
+ "Scope",
+ "Last event",
+ "Duration",
+ "Profile",
+ "Timestamp"
+ };
+ }
+
+ @java.lang.Override
+ protected DataTable buildDataTable() {
+ Query query = new Query();
+ query.setSortby("lastEventDate:desc");
+ Condition matchAllCondition = new Condition(definitionsService.getConditionType("matchAllCondition"));
+ query.setCondition(matchAllCondition);
+ PartialList<Session> lastModifiedProfiles = profileService.searchSessions(query);
+ DataTable dataTable = new DataTable();
+ for (Session session : lastModifiedProfiles.getList()) {
+ ArrayList<Comparable> rowData = new ArrayList<>();
+ rowData.add(session.getItemId());
+ rowData.add(session.getScope());
+ rowData.add(session.getLastEventDate());
+ rowData.add(session.getDuration());
+ rowData.add(session.getProfileId());
+ rowData.add(session.getTimeStamp());
+ dataTable.addRow(rowData.toArray(new Comparable[rowData.size()]));
+ }
+ return dataTable;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11c847c0/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SessionViewCommand.java
----------------------------------------------------------------------
diff --git a/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SessionViewCommand.java b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SessionViewCommand.java
new file mode 100644
index 0000000..53725d0
--- /dev/null
+++ b/tools/shell-dev-commands/src/main/java/org/apache/unomi/shell/commands/SessionViewCommand.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.unomi.shell.commands;
+
+import org.apache.karaf.shell.commands.Argument;
+import org.apache.karaf.shell.commands.Command;
+import org.apache.karaf.shell.console.OsgiCommandSupport;
+import org.apache.unomi.api.Session;
+import org.apache.unomi.api.services.ProfileService;
+import org.apache.unomi.persistence.spi.CustomObjectMapper;
+
+@Command(scope = "unomi", name = "session-view", description = "This command will dump a session as a JSON string")
+public class SessionViewCommand extends OsgiCommandSupport {
+ private ProfileService profileService;
+
+ public void setProfileService(ProfileService profileService) {
+ this.profileService = profileService;
+ }
+
+ @Argument(index = 0, name = "session", description = "The identifier for the session", required = true, multiValued = false)
+ String sessionIdentifier;
+
+ @Override
+ protected Object doExecute() throws Exception {
+ Session session = profileService.loadSession(sessionIdentifier, null);
+ if (session == null) {
+ System.out.println("Couldn't find a session with id=" + sessionIdentifier);
+ return null;
+ }
+ String jsonSession = CustomObjectMapper.getObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(session);
+ System.out.println(jsonSession);
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-unomi/blob/11c847c0/tools/shell-dev-commands/src/main/resources/OSGI-INF/blueprint/blueprint.xml
----------------------------------------------------------------------
diff --git a/tools/shell-dev-commands/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/tools/shell-dev-commands/src/main/resources/OSGI-INF/blueprint/blueprint.xml
index c86d45f..8fb4530 100644
--- a/tools/shell-dev-commands/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ b/tools/shell-dev-commands/src/main/resources/OSGI-INF/blueprint/blueprint.xml
@@ -17,14 +17,9 @@
-->
<blueprint xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
- xmlns:cxf="http://cxf.apache.org/blueprint/core" xmlns:jaxrs="http://cxf.apache.org/blueprint/jaxrs"
xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:shell="http://karaf.apache.org/xmlns/shell/v1.1.0"
- xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
- http://cxf.apache.org/blueprint/jaxrs http://cxf.apache.org/schemas/blueprint/jaxrs.xsd
- http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd
- http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0 http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.1.0.xsd">
+ xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
<reference id="segmentService" interface="org.apache.unomi.api.services.SegmentService"/>
<reference id="userListService" interface="org.apache.unomi.api.services.UserListService"/>
@@ -81,6 +76,38 @@
<shell:property name="segmentService" ref="segmentService" />
</shell:action>
</shell:command>
+ <shell:command>
+ <shell:action class="org.apache.unomi.shell.commands.ProfileListCommand">
+ <shell:property name="definitionsService" ref="definitionsService" />
+ <shell:property name="profileService" ref="profileService" />
+ </shell:action>
+ </shell:command>
+ <shell:command>
+ <shell:action class="org.apache.unomi.shell.commands.ProfileViewCommand">
+ <shell:property name="profileService" ref="profileService" />
+ </shell:action>
+ </shell:command>
+ <shell:command>
+ <shell:action class="org.apache.unomi.shell.commands.EventTailCommand">
+ </shell:action>
+ </shell:command>
+ <shell:command>
+ <shell:action class="org.apache.unomi.shell.commands.EventViewCommand">
+ <shell:property name="definitionsService" ref="definitionsService" />
+ <shell:property name="eventService" ref="eventService" />
+ </shell:action>
+ </shell:command>
+ <shell:command>
+ <shell:action class="org.apache.unomi.shell.commands.SessionViewCommand">
+ <shell:property name="profileService" ref="profileService" />
+ </shell:action>
+ </shell:command>
+ <shell:command>
+ <shell:action class="org.apache.unomi.shell.commands.SessionListCommand">
+ <shell:property name="definitionsService" ref="definitionsService" />
+ <shell:property name="profileService" ref="profileService" />
+ </shell:action>
+ </shell:command>
</shell:command-bundle>
</blueprint>