diff --git a/packages/analytics/src/models/sessions.js b/packages/analytics/src/models/sessions.js
index e290a8b..72d5aa4 100644
--- a/packages/analytics/src/models/sessions.js
+++ b/packages/analytics/src/models/sessions.js
@@ -51,7 +51,16 @@ export async function sessionList() {
},
])
return sessions.map(
- ({ _id, user, quest, status, createdAt, finishedAt, commands }) => {
+ ({
+ _id,
+ user,
+ quest,
+ status,
+ createdAt,
+ finishedAt,
+ commands,
+ lastActivityAt,
+ }) => {
return {
_id,
user: user.username,
@@ -59,7 +68,8 @@ export async function sessionList() {
status,
createdAt: createdAt?.toLocaleString(),
finishedAt: finishedAt?.toLocaleString(),
- usedTime: finishedAt ? formatTime(finishedAt - createdAt) : '',
+ lastActivityAt: lastActivityAt?.toLocaleString(),
+ usedTime: formatTime(lastActivityAt - createdAt),
commandCount: commands?.length,
}
}
@@ -69,9 +79,10 @@ export async function sessionList() {
export async function sessionDetail(id) {
const session = await Session.findById(id).populate('user').exec()
const commands = (await Command.find({ session: id })).map(
- ({ command, pwd, output, error, createdAt }) => ({
+ ({ command, pwd, output, error, createdAt, stage }) => ({
command: command?.slice(0, 20),
pwd,
+ stage,
output: output?.slice(0, 50),
error: error?.slice(0, 50),
createdAt: createdAt?.toLocaleString(),
diff --git a/packages/analytics/views/sessionDetail.handlebars b/packages/analytics/views/sessionDetail.handlebars
index 71d8aa6..d43b8fe 100644
--- a/packages/analytics/views/sessionDetail.handlebars
+++ b/packages/analytics/views/sessionDetail.handlebars
@@ -40,6 +40,7 @@
PWD |
Output |
Error |
+ Stage |
Created At |
{{#each commands}}
@@ -48,6 +49,7 @@
{{pwd}} |
{{output}} |
{{error}} |
+ {{stage}} |
{{createdAt}} |
{{/each}}
diff --git a/packages/models/command.js b/packages/models/command.js
index 277a2df..40a03bb 100644
--- a/packages/models/command.js
+++ b/packages/models/command.js
@@ -25,6 +25,10 @@ const Command = model(
type: String,
required: false,
},
+ stage: {
+ type: String,
+ required: false,
+ },
},
{ timestamps: true }
)
diff --git a/quests/helloworld/game.yml b/quests/helloworld/game.yml
index 8cbc85e..9c7e9cc 100644
--- a/quests/helloworld/game.yml
+++ b/quests/helloworld/game.yml
@@ -82,7 +82,7 @@ stages:
pwd:
- '^/home/commander$'
command:
- - cat forgotten-scroll.txt
+ - cat forgotten_scroll.txt
responses:
- type: dialogue
speaker: Unix 精靈
diff --git a/server/src/api/controllers/commandController.js b/server/src/api/controllers/commandController.js
index ffd7973..36f998a 100644
--- a/server/src/api/controllers/commandController.js
+++ b/server/src/api/controllers/commandController.js
@@ -41,6 +41,11 @@ export async function newCommand(req, res) {
const response = await commandHandler.run()
+ if (response) {
+ c.stage = response.stage
+ await c.save()
+ }
+
res.status(201).json(response)
await session.save()
}
diff --git a/server/src/game/commandHandler.js b/server/src/game/commandHandler.js
index 1960333..aec371a 100644
--- a/server/src/game/commandHandler.js
+++ b/server/src/game/commandHandler.js
@@ -113,16 +113,14 @@ export default class CommandHandler extends SessionHandler {
stages.map((stage) => this.isMatch(stage.condition))
)
- console.log('matches', matches)
-
const stage = stages.find((_, i) => matches[i])
- console.log('stage', stage)
if (!stage) {
return {}
}
const response = this.execute(stage)
return {
+ stage: stage.id,
end: this.session.status === 'finished',
...response,
}