Skip to content

Commit

Permalink
Merge pull request #293 from NationalSecurityAgency/t#292/3_1_features
Browse files Browse the repository at this point in the history
T#292/3 1 features
  • Loading branch information
rmmayo authored Sep 23, 2024
2 parents 4a61a55 + 5d87e9f commit 456b95b
Show file tree
Hide file tree
Showing 30 changed files with 248 additions and 34 deletions.
22 changes: 17 additions & 5 deletions cypress/e2e/admin.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,13 @@ context('Admin: Generate Screenshots', () => {
cy.snap('modal-projects-new_project', '.p-dialog')
})

it('Gen User Progress Table', () => {
// projects page
cy.visit('/administrator/projects/movies/users')
cy.get('[data-cy="usersTable"]').contains('Current Level:')
cy.snap('component-user_progress_table', '#mainContent2');
})

it('Gen Projects pages - dark mode', () => {
cy.request('POST', '/app/userInfo/settings', [{
'settingGroup': 'user.prefs',
Expand Down Expand Up @@ -149,7 +156,6 @@ context('Admin: Generate Screenshots', () => {
});

it('Gen Learning Path', () => {
cy.viewport(1350, 1200);
cy.visit('/administrator/projects/movies/learning-path')
cy.get('[data-cy="graphLegend"]')
cy.get('[data-cy="learningPathTable"] [data-cy="skillsBTableTotalRows"]')
Expand All @@ -158,6 +164,13 @@ context('Admin: Generate Screenshots', () => {
cy.snap('component-manage-learning-path', '[data-cy="addPrerequisiteToLearningPath"]')
})

it('user performed skills', () => {
cy.visit('/administrator/projects/movies/users/[email protected]/skillEvents')
cy.get('[data-cy="performedSkillsTable"] [data-cy="addSkillFilter"]').should('have.length', 10)
cy.get('[data-cy="skillsBTableTotalRows"]')
cy.snap('page-user-performed-skills');
})

it('Gen Project pages - levels', () => {
cy.viewport(1350, 800);

Expand All @@ -167,14 +180,14 @@ context('Admin: Generate Screenshots', () => {
})

it('Gen Project pages - skill metrics', () => {
cy.viewport(1350, 1200);
// cy.viewport(1350, 1200);
cy.visit('/administrator/projects/movies/metrics/skills')
cy.get('[data-cy="skillsNavigator-table"]');
cy.snap('page-project-metrics-skills');
})

it('Gen Project pages - subjects metrics', () => {
cy.viewport(1350, 1200);
// cy.viewport(1350, 1200);
cy.visit('/administrator/projects/movies/metrics/subjects')

cy.contains('Number of users for each level for each subject');
Expand All @@ -186,7 +199,7 @@ context('Admin: Generate Screenshots', () => {
})

it('Gen Project pages - achievements metrics', () => {
cy.viewport(1350, 1200);
// cy.viewport(1350, 1200);
cy.visit('/administrator/projects/movies/metrics/achievements')
cy.contains('Overall Levels');
cy.get('[data-cy="achievementsNavigator-table"]')
Expand Down Expand Up @@ -221,7 +234,6 @@ context('Admin: Generate Screenshots', () => {
});

it('Gen Subject pages', () => {
cy.viewport(1350, 1200);
// skills page
cy.visit('/administrator/projects/movies/subjects/Action');
cy.get('[data-cy="editSkillButton_EdgeofTomorrow"]');
Expand Down
2 changes: 1 addition & 1 deletion cypress/e2e/progress-and-ranking.cy.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ context('Progress and Ranking: Generate Screenshots', () => {
cy.snap('page-progress-and-rankings-view-my-usage');
});

it.only('Gen View Badges page', () => {
it('Gen View Badges page', () => {
cy.visit('/progress-and-rankings/my-badges')
cy.snap('page-progress-and-rankings-badges');
cy.get('[data-cy="filterBtn"]').click();
Expand Down
1 change: 0 additions & 1 deletion docs/.vuepress/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,6 @@ sidebar = sidebar.concat([{
'/dashboard/user-guide/levels',
'/dashboard/user-guide/users',
'/dashboard/user-guide/metrics',
'/dashboard/user-guide/issues',
'/dashboard/user-guide/inception',
'/dashboard/user-guide/contact-admins',
'/dashboard/user-guide/settings',
Expand Down
39 changes: 39 additions & 0 deletions docs/dashboard/install-guide/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,12 @@ When that happens:
- the SkillTree Dashboard is placed into a read-only state: dashboard can be viewed and navigated but mutations will not be allowed
- skill requests are retained in a Write-Ahead-Log (WAL) to be replayed after the upgrade is done

There are two choices of where the WAL can be stored:
1. Local file system
2. Amazon Simple Storage Service ([Amazon S3](https://aws.amazon.com/s3/)) - Recommended in case of a multi-node AWS deployment

### Storing the Write-Ahead-Log on Local File System

Please configure the following properties in order to place ``skills-service`` in the Upgrade-In-Progress state:
```properties
# place the SkillTree platform in the Upgrade-In-Progress state
Expand All @@ -415,6 +421,23 @@ skills.config.db-upgrade-in-progress=true
skills.queued-event-path=/queued_events
```

### Storing the Write-Ahead-Log on Amazon S3

Please configure the following properties in order to place ``skills-service`` in the Upgrade-In-Progress state:
```properties
# place the SkillTree platform in the Upgrade-In-Progress state
skills.config.db-upgrade-in-progress=true
# enable S3 support and specify the location of the directory where the Write-Ahead-Logs will be stored
spring.cloud.aws.s3.enabled=true
skills.queued-event-path=s3://bucketname/optional-dir

# S3 files are immutable therefore the requests are cached locally and flushed to a new S3 file based on this configuration
skills.queued-event-path.commit-every-n-records=250
```


# Upgrade-In-Progress Life Cycle

When the SkillTree Dashboard is started with the ``skills.config.db-upgrade-in-progress`` property set to ``true`` it will:
- display a prominent banner on the top of the SkillTree Dashboard and any embedded Skills Display informing users that an upgrade is in progress
- any mutation (ex. creating/editing skills/projects/badges, etc...) will redirect users to an informational page indicating that an upgrade is in progress
Expand All @@ -428,6 +451,22 @@ General steps to upgrade the database engine:
5. reconfigure SkillTree production instance to point to the new database and turn off the Upgrade-In-Progress state
- when the ``skills-service`` is restarted it will replay the events stored in the WAL; the WAL files will then be removed

### Admin Dashboard Access

Optionally, you can enable dashboard access limitations to restrict access to the admin portion of the dashboard,
controlling who can create projects, view and manage project administrative settings and features.

```properties
skills.config.ui.limitAdminAccess=true
```

When the `skills.config.ui.limitAdminAccess` property is set to `true`, a new section called `Training Creators Management`
appears on the Security page, accessible only to users with the `root` role. This section allows root administrators to add and
remove users with the Training Creator role.

With `skills.config.ui.limitAdminAccess` enabled, only users assigned the `Training Creator` role will have access to the
administrative portion of the SkillTree Dashboard.

### Private Invite Only Projects

In the case of Private Invite Only Projects, users are invited to join a project.
Expand Down
9 changes: 0 additions & 9 deletions docs/dashboard/user-guide/issues.md

This file was deleted.

65 changes: 56 additions & 9 deletions docs/dashboard/user-guide/metrics.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,68 @@
# Metrics

Almost every page in the SkillTree dashboard exposes metrics and statistics about that particular entity/concept.
Many project administrative pages in the SkillTree dashboard expose metrics and statistics about that particular entity/concept.
These metrics are very much context aware so as an example, graphs and charts you see on a subject page will be for that specific subject and
metrics on the project page will be for the entire project.

![SkillTree Metrics](../../screenshots/admin/page-project-metrics-skills.png)
## Project Metrics

----
----
Project's metrics are accessible via `Project -> Metrics`, providing an overview of project performance.
Metrics can be further broken down by achievements, subjects, and skills, and can be accessed in two ways:

![SkillTree Metrics](../../screenshots/admin/page-project-metrics-subjects.png)
- Via buttons at the bottom of the Project Metrics page
- Using navigation icons in the top-right corner of the main content area

### Project Achievements Metrics

----
----
Accessible via `Project -> Metrics -> Achievements`, displays a level breakdown chart, followed by a detailed achievements table.

![SkillTree Metrics](../../screenshots/admin/page-project-metrics-achievements.png)

----
----
Supports filtering and sorting by column. Additionally, achievements can be exported to Excel format, with applied
filters also applied to the exported data.

### Project Subject Metrics

Accessible via Project -> Metrics -> Subjects, providing high-level metrics for each subject, including:

- User Distribution by Level: A bar chart displaying the number of users who have achieved each level for a given subject.
- Level Progression Over Time: A time-based chart, generated after selecting a subject, showing the number of users who have earned each level over time.

![SkillTree Metrics](../../screenshots/admin/page-project-metrics-subjects.png)

### Project Skills Metrics

Accessible via `Project -> Metrics -> Skills`, providing high-level metrics pivoted by skills. The page features a table with the following columns:

- **Skill Name**: The name of the skill.
- **Links**: Deep link to the skill's administrative page and [Single Skill Metrics page](/dashboard/user-guide/metrics.html#single-skill-metrics)
- **Users Achieved**: The number of users who have completed the skill.
- **Users in Progress**: The number of users who have earned at least 1 point but have not yet completed all required occurrences.
- **Last Reported**: The date when the skill was last reported by any user.
- **Last Achieved**: The date when the skill was last achieved by any user.

![SkillTree Metrics](../../screenshots/admin/page-project-metrics-skills.png)

In addition to the skill metrics table, the page offers several useful filters to help admins quickly identify trends and patterns:
- **Overlooked Skill**: Filter skills that are rarely used or reported.
- **Top Skill**: Filter skills that are most popular or frequently achieved.
- **High Activity**: Filter skills with a high volume of user activity.
- **Never Achieved**: Filter skills that have never been achieved by any user.
- **Never Reported**: Filter skills that have never been reported by any user.

Admins can also export the entire table to Excel format using the `Export All Rows` button located at the top right of the table.

## Single Skill Metrics

The Single Skill Metrics Section provides detailed metrics for a specific skill, allowing admins to dive deeper into the performance and usage of that skill.

This page can be accessed in several ways including:
- `Project -> Subject -> Skill -> Metrics`
- `Project -> Metrics -> Skills -> Skill Link`

![SkillTree Metrics](../../screenshots/admin/page-topSkill-metrics.png)

This page showcases Post Achievement Metrics, offering administrators valuable insights into whether skills remain
utilized after achievement. Note that these metrics are most effective for skills with automated achievement event
reporting, which can be set up using the [Skills Reporter JS Utility](/skills-client/js.html#skillsreporter-js-utility) or by leveraging the [REST API endpoint](/skills-client/endpoints.html#report-skill-event-endpoint)."

12 changes: 11 additions & 1 deletion docs/dashboard/user-guide/projects.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ The Dashboard user that creates a project is automatically granted the role of a
| [Cross-project Prerequisites](/dashboard/user-guide/learning-path.html#cross-project-prerequisites) | Create and manage Skill prerequisites across multiple Projects which practically equates to cross-application Skills |
| [Contact Users](/dashboard/user-guide/contact-project-users.html) | Communicate with users of your Project |
| [Metrics](/dashboard/user-guide/metrics.html) | Charts and graph. These are page specific - Project, Subject, Badge, and User will have stats specifically for those pages |
| [Issues](/dashboard/user-guide/issues.html) | Errors related to the Project such as non-existant Skills that have been reported |
| [Issues](/dashboard/user-guide/projects.html#issues) | Errors related to the Project such as non-existant Skills that have been reported |
| [Settings](/dashboard/user-guide/projects.html#settings) | Project level settings |

## Settings
Expand Down Expand Up @@ -250,5 +250,15 @@ The Activity History feature provides a comprehensive record of all administrati

<import-content path="/dashboard/user-guide/common/activity-history.html"/>

## Issues

Displays any errors that have been recorded for a Project, how many times they have occurred, and when the most recent occurrence was.

![SkillTree Issues](../../screenshots/admin/page-project-issues.png)

There are a number of different issues that are captured here. One example includes attempts to report a Skill that doesn't exist in a Project. This commonly occurs when a typo has been made
during the integration of skill reporting into an application, or when switching an application from using a staging project to a production project where
the staging skills do not exist or have been created with different Skill IDs.



24 changes: 22 additions & 2 deletions docs/dashboard/user-guide/quizzes-and-surveys.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,11 +91,11 @@ answered correctly in order to get the credit.

By default, users have an unlimited number of attempts to pass a quiz. You can set the maximum number of attempts to 1 or more.

#### Setting: Randomize Question Order <since project="skills-service" version="2.9" />
#### Setting: Randomize Question Order

If enabled, questions are presented in a random order each time the quiz is taken.

#### Setting: Randomize Answers Order <since project="skills-service" version="2.9" />
#### Setting: Randomize Answers Order

If enabled, each question's answers are presented in a random order each time the quiz is taken.

Expand All @@ -104,6 +104,16 @@ If enabled, each question's answers are presented in a random order each time th
If a time limit is set, users will have a specific duration to complete the quiz.
If they exceed the time limit, their attempt will be marked as 'Failed'.

#### Setting: Allow Retakes After Completion <since project="skills-service" version="3.1" />

With this feature enabled, users can retake quizzes even after achieving a passing score. The system
accurately tracks each successful attempt, providing a comprehensive view of user progress and performance.

#### Setting: Show Correct Answers On Failure: <since project="skills-service" version="3.1" />

Enabling this feature will provide the correct answers on failed quiz attempts, allowing users to review and understand
the correct answers, improving their learning and understanding of the material.

## Survey

A Survey is a data collection technique utilizing one or more questions. Surveys can be associated to a skill or can be
Expand Down Expand Up @@ -134,6 +144,16 @@ Please use the Answer's dropdown to select the type, currently available options
Use the `Preview` button on the top left below the Survey name in order to see what the survey will look like to your users.
:::

### Survey Settings

A Survey has customization parameters, to customize a survey please navigate to ``Quizzes and Surveys -> Survey -> Settings`` page.

#### Setting: Allow Retakes After Completion <since project="skills-service" version="3.1" />

With this feature enabled, users can retake surveys unlimited number of times. The system
accurately tracks each completion, providing a comprehensive view of user progress and performance.


## Results
Summarized quiz/survey results can be located on the Results page (``Quizzes and Surveys -> Quiz/Survey -> Results ``).

Expand Down
11 changes: 11 additions & 0 deletions docs/dashboard/user-guide/skills.md
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,17 @@ Skills that are configured to expire will have warnings visualized in the Skills
A history of skills that have been expired can be viewed from the `Skill Expiration History` table on the `Project` page.
This table will allow you to view the skill, the user associated and the date it expired.

## Skills Definition Export

To export the skills table to Excel, click the `Export All Skills` button located at the top right of the table. This will
generate an Excel file containing all skills for the current subject.

Important Export Details:

- All skills under a subject are included in the export, including those within Skill Groups.
- Skill Groups are not exported as separate rows, but their associated skills will include the group name in each row.
- Descriptions are not included in the export due to their complex formatting, which includes rich text, HTML, and embedded images that are not compatible with Excel cells.

## Copy Skill
To use an existing Skill as a template for a new Skill, you can use the ![copy skill button](./screenshots/copy_btn.png) button available on a Skill row displayed on the Subject page.
This will open a new Skill dialog populated with the details of the selected copy-from Skill. The name and id will be prepended with ``Copy of`` which can be changed
Expand Down
Loading

0 comments on commit 456b95b

Please sign in to comment.