Index: dbLearnStar-webApp/pom.xml
===================================================================
--- dbLearnStar-webApp/pom.xml	(revision ab4c4da61e4df88f18f5516e2dafaa0da1e6e469)
+++ dbLearnStar-webApp/pom.xml	(revision c9bfefb9e7c40c60c62335e7bccc5f95746861ad)
@@ -11,5 +11,5 @@
 	<groupId>dblearnstar</groupId>
 	<artifactId>dblearnstar</artifactId>
-	<version>0.9.1</version>
+	<version>0.9.2</version>
 	<name>dbLearnStar</name>
 
Index: dbLearnStar-webApp/src/main/java/dblearnstar/webapp/pages/instructor/ActivityMonitor.java
===================================================================
--- dbLearnStar-webApp/src/main/java/dblearnstar/webapp/pages/instructor/ActivityMonitor.java	(revision c9bfefb9e7c40c60c62335e7bccc5f95746861ad)
+++ dbLearnStar-webApp/src/main/java/dblearnstar/webapp/pages/instructor/ActivityMonitor.java	(revision c9bfefb9e7c40c60c62335e7bccc5f95746861ad)
@@ -0,0 +1,66 @@
+package dblearnstar.webapp.pages.instructor;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.apache.tapestry5.EventContext;
+import org.apache.tapestry5.annotations.Persist;
+import org.apache.tapestry5.annotations.Property;
+import org.apache.tapestry5.annotations.SessionState;
+import org.apache.tapestry5.ioc.annotations.Inject;
+
+import dblearnstar.model.entities.ActivityInTask;
+import dblearnstar.model.entities.Person;
+import dblearnstar.model.entities.TaskInTestInstance;
+import dblearnstar.model.model.UserInfo;
+import dblearnstar.webapp.annotations.AdministratorPage;
+import dblearnstar.webapp.annotations.InstructorPage;
+import dblearnstar.webapp.services.ActivityManager;
+
+@InstructorPage
+@AdministratorPage
+public class ActivityMonitor {
+
+	@SessionState
+	private UserInfo userInfo;
+
+	@Inject
+	private ActivityManager activityManager;
+
+	private Person selectedPerson;
+
+	private TaskInTestInstance selectedTaskInTestInstance;
+
+	@Property
+	private ActivityInTask activityInTask;
+
+	@Property
+	@Persist
+	private String filterType;
+
+	public void onActivate(EventContext ec) {
+		if (!ec.isEmpty()) {
+			selectedPerson = ec.get(Person.class, 0);
+			selectedTaskInTestInstance = ec.get(TaskInTestInstance.class, 1);
+		}
+	}
+
+	public Object[] onPassivate() {
+		Object[] a = { selectedPerson, selectedTaskInTestInstance };
+		return a;
+	}
+
+	public List<ActivityInTask> getActivitiesInTaskForPerson() {
+		List<ActivityInTask> list = activityManager.getActivitiesInTaskForPerson(selectedPerson,
+				selectedTaskInTestInstance);
+		if (filterType != null && filterType.length() > 0) {
+			return list.stream().filter(p -> p.getType().equals(filterType)).collect(Collectors.toList());
+		} else {
+			return list;
+		}
+	}
+
+	public String getHash() {
+		return Integer.toString(activityInTask.getPayload().trim().hashCode());
+	}
+}
Index: dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/ActivityDao.java
===================================================================
--- dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/ActivityDao.java	(revision ab4c4da61e4df88f18f5516e2dafaa0da1e6e469)
+++ dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/ActivityDao.java	(revision c9bfefb9e7c40c60c62335e7bccc5f95746861ad)
@@ -23,5 +23,7 @@
 import java.util.List;
 
+import dblearnstar.model.entities.ActivityInTask;
 import dblearnstar.model.entities.Person;
+import dblearnstar.model.entities.TaskInTestInstance;
 
 public interface ActivityDao {
@@ -29,3 +31,6 @@
 	List<Person> activePersonsInInterval(int seconds);
 
+	List<ActivityInTask> getActivitiesInTaskForPerson(Person selectedPerson,
+			TaskInTestInstance selectedTaskInTestInstance);
+
 }
Index: dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/ActivityDaoImpl.java
===================================================================
--- dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/ActivityDaoImpl.java	(revision ab4c4da61e4df88f18f5516e2dafaa0da1e6e469)
+++ dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/ActivityDaoImpl.java	(revision c9bfefb9e7c40c60c62335e7bccc5f95746861ad)
@@ -30,6 +30,9 @@
 import org.apache.tapestry5.ioc.annotations.Inject;
 import org.hibernate.Session;
+import org.slf4j.Logger;
 
+import dblearnstar.model.entities.ActivityInTask;
 import dblearnstar.model.entities.Person;
+import dblearnstar.model.entities.TaskInTestInstance;
 
 public class ActivityDaoImpl implements ActivityDao {
@@ -37,4 +40,7 @@
 	@Inject
 	private Session session;
+
+	@Inject
+	private Logger logger;
 
 	private Session getEntityManager() {
@@ -54,3 +60,18 @@
 	}
 
+	@Override
+	public List<ActivityInTask> getActivitiesInTaskForPerson(Person p, TaskInTestInstance tti) {
+		Query q = getEntityManager().createQuery("""
+				select ait
+				from ActivityInTask ait 
+				join ait.person p 
+				join ait.taskInTestInstance tti
+				where p.personId=:personId and tti.taskInTestInstanceId=:taskInTestInstanceId
+				order by ait.whenOccured desc
+				""");
+		q.setParameter("personId", p.getPersonId());
+		q.setParameter("taskInTestInstanceId", tti.getTaskInTestInstanceId());
+		return UsefulMethods.castList(ActivityInTask.class, q.getResultList());
+	}
+
 }
Index: dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/ActivityManager.java
===================================================================
--- dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/ActivityManager.java	(revision ab4c4da61e4df88f18f5516e2dafaa0da1e6e469)
+++ dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/ActivityManager.java	(revision c9bfefb9e7c40c60c62335e7bccc5f95746861ad)
@@ -23,5 +23,7 @@
 import java.util.List;
 
+import dblearnstar.model.entities.ActivityInTask;
 import dblearnstar.model.entities.Person;
+import dblearnstar.model.entities.TaskInTestInstance;
 
 public interface ActivityManager {
@@ -29,3 +31,6 @@
 	public List<Person> activePersonsInInterval(int seconds);
 
+	public List<ActivityInTask> getActivitiesInTaskForPerson(Person selectedPerson,
+			TaskInTestInstance selectedTaskInTestInstance);
+
 }
Index: dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/ActivityManagerImpl.java
===================================================================
--- dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/ActivityManagerImpl.java	(revision ab4c4da61e4df88f18f5516e2dafaa0da1e6e469)
+++ dbLearnStar-webApp/src/main/java/dblearnstar/webapp/services/ActivityManagerImpl.java	(revision c9bfefb9e7c40c60c62335e7bccc5f95746861ad)
@@ -25,5 +25,7 @@
 import org.apache.tapestry5.ioc.annotations.Inject;
 
+import dblearnstar.model.entities.ActivityInTask;
 import dblearnstar.model.entities.Person;
+import dblearnstar.model.entities.TaskInTestInstance;
 
 public class ActivityManagerImpl implements ActivityManager {
@@ -37,3 +39,9 @@
 	}
 
+	@Override
+	public List<ActivityInTask> getActivitiesInTaskForPerson(Person selectedPerson,
+			TaskInTestInstance selectedTaskInTestInstance) {
+		return activityDao.getActivitiesInTaskForPerson(selectedPerson, selectedTaskInTestInstance);
+	}
+
 }
Index: dbLearnStar-webApp/src/main/resources/dblearnstar/webapp/pages/admin/SubmissionEvaluations.tml
===================================================================
--- dbLearnStar-webApp/src/main/resources/dblearnstar/webapp/pages/admin/SubmissionEvaluations.tml	(revision ab4c4da61e4df88f18f5516e2dafaa0da1e6e469)
+++ dbLearnStar-webApp/src/main/resources/dblearnstar/webapp/pages/admin/SubmissionEvaluations.tml	(revision c9bfefb9e7c40c60c62335e7bccc5f95746861ad)
@@ -137,6 +137,6 @@
 						t:id="zSolution" id="zSolution">
 						<label for="solution">${message:submittedBy-label}:
-							${editedAssessmentSubmitterName}</label>
-						<a href="" t:type="eventlink" t:id="copySolutionToFeedback"
+							${editedAssessmentSubmitterName}</label> <a href="" t:type="eventlink"
+							t:id="copySolutionToFeedback"
 							class="float-right btn btn-sm btn-danger p-0 pl-1 pr-1">↦</a>
 						<div class="card-body collapse" id="collapsedDescription">
@@ -144,5 +144,6 @@
 						</div>
 						<div class="pre-scrollable modalSubmission">
-							<pre><t:outputraw t:value="formattedSolution"></t:outputraw>
+							<pre>
+								<t:outputraw t:value="formattedSolution"></t:outputraw>
 							</pre>
 						</div>
@@ -363,4 +364,8 @@
 						</p:else>
 					</div>
+					<a href="" t:type="pagelink" t:id="viewActivities"
+						t:context="[submission.studentStartedTest.student.person,submission.taskInTestInstance]"
+						t:page="instructor/ActivityMonitor" class="btn btn-sm btn-info"><img
+						t:type="svgicon" t:path="info" />${message:instructor/activityMonitor-pagelink}</a>
 				</p:assessmentCell>
 				<p:empty>
Index: dbLearnStar-webApp/src/main/resources/dblearnstar/webapp/pages/instructor/ActivityMonitor.tml
===================================================================
--- dbLearnStar-webApp/src/main/resources/dblearnstar/webapp/pages/instructor/ActivityMonitor.tml	(revision c9bfefb9e7c40c60c62335e7bccc5f95746861ad)
+++ dbLearnStar-webApp/src/main/resources/dblearnstar/webapp/pages/instructor/ActivityMonitor.tml	(revision c9bfefb9e7c40c60c62335e7bccc5f95746861ad)
@@ -0,0 +1,26 @@
+<html t:type="layout"
+	t:title="message:instructor/activityMonitor-pagelink"
+	xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd"
+	xmlns:p="tapestry:parameter">
+
+<h1>${message:instructor/activityMonitor-pagelink}</h1>
+
+<div class="card card-body bg-light mb-3">
+	<form class="form form-inline" t:type="form">
+		<label t:type="label" t:for="filterType"></label> <input
+			t:type="textfield" t:id="filterType" />
+	</form>
+</div>
+
+<table class="table table-sm table-striped table-bordered table-hover"
+	t:type="grid" t:source="activitiesInTaskForPerson"
+	t:row="activityInTask" t:add="hashCode" t:rowsperpage="100">
+	<p:whenOccuredCell>
+		<t:output format="literal: dd.MM.yyyy HH:mm:ss.SSS"
+			value="activityInTask.whenOccured" />
+	</p:whenOccuredCell>
+	<p:hashCodeCell>
+	${hash}
+	</p:hashCodeCell>
+</table>
+</html>
Index: dbLearnStar-webApp/src/main/webapp/WEB-INF/app.properties
===================================================================
--- dbLearnStar-webApp/src/main/webapp/WEB-INF/app.properties	(revision ab4c4da61e4df88f18f5516e2dafaa0da1e6e469)
+++ dbLearnStar-webApp/src/main/webapp/WEB-INF/app.properties	(revision c9bfefb9e7c40c60c62335e7bccc5f95746861ad)
@@ -19,4 +19,5 @@
 admin/TestCollectionManagement-pagelink=Test Collections
 instructor/relationSchemaEvaluation-pagelink=Relation Schema Evaluation
+instructor/activityMonitor-pagelink=Activity Monitoring
 answeredByInstructor-label=Answered by an instructor
 serverTime-label=Server time
Index: dbLearnStar-webApp/src/main/webapp/WEB-INF/app_mk.properties
===================================================================
--- dbLearnStar-webApp/src/main/webapp/WEB-INF/app_mk.properties	(revision ab4c4da61e4df88f18f5516e2dafaa0da1e6e469)
+++ dbLearnStar-webApp/src/main/webapp/WEB-INF/app_mk.properties	(revision c9bfefb9e7c40c60c62335e7bccc5f95746861ad)
@@ -19,4 +19,5 @@
 admin/TestCollectionManagement-pagelink=Колекции тестови
 instructor/relationSchemaEvaluation-pagelink=Евалуација на релациска шема
+instructor/activityMonitor-pagelink=Мониторинг на активности
 answeredByInstructor-label=Одговорено од наставник
 serverTime-label=Време на серверот
