Skip to content

Commit edbaefd

Browse files
authored
Merge 5 17 26 (#159)
2 parents 70f1730 + 9b18dcd commit edbaefd

157 files changed

Lines changed: 14970 additions & 1816 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.gitignore‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,4 @@ learning_observer/learning_observer/static_data/google/
3939
learning_observer/learning_observer/static_data/admins.yaml
4040
.ipynb_checkpoints/
4141
.eggs/
42-
.next/
42+
.next/

‎Dockerfile‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,15 @@ FROM python:3.10
22
RUN git config --global --add safe.directory /app
33
WORKDIR /app
44

5+
# Future work:
6+
# - This image currently uses an older Python base image version.
7+
# - Update the Python version to align with current LO/WO support targets.
8+
# - Some configurations may also require extra roster files mounted/provided
9+
# at runtime (for example: admins.yaml or teachers.yaml).
10+
# - Consider a layered setup:
11+
# 1) maintain a shared "base LO" Docker image
12+
# 2) extend it with a WO-specific image (or other module-set images)
13+
514
# TODO start redis in here
615
# see about docker loopback
716
RUN apt-get update && \

‎Makefile‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ install: install-pre-commit-hook
4646
# recent version. We would like to directly fetch `lodrc-current`,
4747
# however, the fetch only returns the name of the file it's
4848
# linked to. We do an additional fetch for the linked file.
49-
@LODRC_CURRENT=$$(curl -s https://raw.githubusercontent.com/ETS-Next-Gen/lo_assets/main/lo_dash_react_components/lo_dash_react_components-current.tar.gz); \
50-
pip install https://raw.githubusercontent.com/ETS-Next-Gen/lo_assets/main/lo_dash_react_components/$${LODRC_CURRENT}
49+
@LODRC_CURRENT=$$(curl -s https://raw.githubusercontent.com/ArgLab/lo_assets/main/lo_dash_react_components/lo_dash_react_components-current.tar.gz); \
50+
pip install https://raw.githubusercontent.com/ArgLab/lo_assets/main/lo_dash_react_components/$${LODRC_CURRENT}
5151

5252
install-dev:
5353
# TODO create a dev requirements file

‎README.md‎

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ learning analytics dashboard to help instructors be able to manage
77
student learning processes, and in particular, student writing
88
processes.
99

10-
![linting](https://github.com/ETS-Next-Gen/writing_observer/actions/workflows/pycodestyle.yml/badge.svg)
10+
![linting](https://github.com/ArgLab/writing_observer/actions/workflows/pycodestyle.yml/badge.svg)
1111

1212
## Learning Observer
1313

@@ -17,6 +17,14 @@ per-student writing data, and aggegators to make dashboards. We've
1717
tested this in math and writing, but our focus is on writing process
1818
data.
1919

20+
At a high level, Learning Observer functions as an application platform.
21+
The primary `learning_observer` module bootstraps the system: it loads
22+
configuration, connects to storage and messaging back ends, and brokers
23+
communication with data sources. Other modules plug into that
24+
infrastructure to define the specific reducers, dashboards, and other
25+
items that users interact with, letting teams experiment with new
26+
features without having to reimplement the platform core.
27+
2028
It's not finished, but it's moving along quickly.
2129

2230
## Writing Observer
@@ -54,9 +62,10 @@ that the core approach and APIs are correct.
5462

5563
## Getting Started
5664

57-
We have a short guide to [getting started](docs/workshop.md). Getting
58-
the base system working is pretty easy. The guide is pretty
59-
comprehensive (including how to develop your first module).
65+
We have a short guide to [installing the system](docs/tutorials/install.md).
66+
Getting the base system working is pretty easy. To create a new module
67+
for the system to use, check out our [cookiecutter module guide](docs/tutorials/cookiecutter-module.md).
68+
For a current package/module overview, see the [module inventory](docs/reference/module_inventory.md).
6069

6170
### System requirements
6271

‎VERSION‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.1.0+2025.10.01T21.16.15.146Z.8b205d0c.master
1+
0.1.0+2026.06.08T14.57.09.3NZ.c99f98d.refactor.portfolio.diff

‎autodocs/how-to.rst‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,29 @@ How-to
44
Practical instructions for achieving specific goals within Learning Observer. Use these guides when you know what outcome you need and want a proven recipe to follow:
55

66
- :doc:`Communication Protocol <docs/how-to/communication_protocol>` - How to query data from reducers or system endpoints for dashboards.
7-
- :doc:`Configure Learning Observer <docs/how-to/config>` - Set up credentials, environment variables, and other configuration details required for a smooth deployment.
87
- :doc:`Build Dashboards <docs/how-to/dashboards>` - Walk through creating dashboards from reducer outputs, including layout choices and data wiring.
9-
- :doc:`LTI <docs/how-to/lti>` - Cover how to install Learning Observer as an LTI application.
8+
- :doc:`Offline Reducer Replay <docs/how-to/offline_replay>` - Explain how to repopulate reducer content with study logs.
9+
- :doc:`Serve as LTI application<docs/how-to/lti>` - Cover how to install Learning Observer as an LTI application.
10+
- :doc:`Connect LO Blocks to Canvas via Learning Observer<docs/how-to/connect_lo_blocks_to_canvas>` - Show how to connect launch LO Blocks through Learning Observer from within Canvas.
11+
- :doc:`Configure Multiple Roster Sources<docs/how-to/multiple_roster_sources>` - Allow the system to dynamically choose a roster source given a user's context.
1012
- :doc:`Run with Docker <docs/how-to/docker>` - Learn how to containerize the stack, manage images, and operate the project using Docker Compose.
1113
- :doc:`Writing Observer Extension <docs/how-to/extension>` - Install, configure, and validate the Writing Observer browser extension for capturing events.
1214
- :doc:`Interactive Environments <docs/how-to/interactive_environments>` - Connect Learning Observer to Jupyter and other live coding setups for iterative development.
15+
- :doc:`Impersonate Users <docs/how-to/impersonation>` - Start and stop acting as another user while keeping dashboards informed.
16+
1317

1418
.. toctree::
1519
:hidden:
1620
:maxdepth: 1
1721
:titlesonly:
1822

1923
docs/how-to/communication_protocol.md
20-
docs/how-to/config.md
2124
docs/how-to/dashboards.md
25+
docs/how-to/offline_replay.md
2226
docs/how-to/lti.md
27+
docs/how-to/connect_lo_blocks_to_canvas.md
28+
docs/how-to/multiple_roster_sources.md
2329
docs/how-to/docker.md
2430
docs/how-to/extension.md
2531
docs/how-to/interactive_environments.md
32+
docs/how-to/impersonation.md

‎autodocs/index.rst‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ per-student writing data, and aggegators to make dashboards. We've
1212
tested this in math and writing, but our focus is on writing process
1313
data.
1414

15+
At a high level, Learning Observer operates as an application platform:
16+
the core :mod:`learning_observer` package boots the system, loads
17+
configured modules, and manages shared data services, while each module
18+
provides the specific dashboards, reducers, and other artifacts that
19+
users interact with.
20+
1521
Our documentation is organized into four main categories, each serving a different purpose. You can explore them below:
1622

1723
- :doc:`Tutorials <tutorials>` - Step-by-step guides to help you learn by doing.

‎autodocs/reference.rst‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ Detailed, structured information about APIs, configurations, and technical detai
99
- :doc:`Linting Rules <docs/reference/linting>` - Review the automated checks that keep the codebase healthy and how to run them locally.
1010
- :doc:`Testing Strategy <docs/reference/testing>` - Explore the testing layers we rely on and guidelines for writing reliable tests.
1111
- :doc:`Versioning and Releases <docs/reference/versioning>` - See how we tag releases, manage dependencies, and maintain backward compatibility.
12+
- :doc:`lo_assets Built Packages <docs/reference/lo_assets>` - Understand how prebuilt package artifacts are published and consumed.
13+
- :doc:`Module Inventory <docs/reference/module_inventory>` - Get a quick at-a-glance list of current monorepo modules and their roles.
1214
- :doc:`Module Reference <modules>` - Dive into the autogenerated API reference for Python modules within Learning Observer.
1315
- :doc:`API Reference <api>` - Inspect the internal functionality of the system.
1416

@@ -23,5 +25,7 @@ Detailed, structured information about APIs, configurations, and technical detai
2325
docs/reference/linting.md
2426
docs/reference/testing.md
2527
docs/reference/versioning.md
28+
docs/reference/lo_assets.md
29+
docs/reference/module_inventory.md
2630
modules
2731
api

‎devops/README.md‎

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,65 @@ We would like to be cross-platform, and evenually support both
1010
Debian-based distros and RPM-based distros. We're not there yet
1111
either. We'd also like to support multiple cloud providers. We're not
1212
there yet either. However, we probably won't accept PRs which move us
13-
away from this goal.
13+
away from this goal.
14+
15+
## Create an AWS account and an EC2 instance.
16+
* Select Ubuntu, nano AMI. The cost should be 0.5 cents per hour.
17+
* In security groups, add HTTP, HTTPS rules. Open up only to your computer's IP address (the client).
18+
* Launch instance.
19+
* Suppose your instance public DNS is {ec2_ip}, e.g., ec2-18-223-122-172.us-east-2.compute.amazonaws.com.
20+
* Create aSSH key pair, save PEM file say under ~/.ssh, chmod to u+r.
21+
22+
## Set up the EC2 instance.
23+
* SSH into the machine: `bash ssh -i {pem_file} ubuntu@{ec2_ip}`.
24+
* (Optional) Create a user account: sudo useradd {user}
25+
* Download the server code (same repository as the extension):
26+
```bash
27+
cd
28+
git clone https://github.com/ETS-Next-Gen/writing_analysis.git writing_analysis
29+
```
30+
* Install Ansible.
31+
```bash
32+
sudo apt-get update
33+
sudo apt-get upgrade
34+
sudo apt-get install ansible
35+
````
36+
* Configure Ansible.
37+
sudo pico /etc/ansible/hosts
38+
Add
39+
```
40+
[localhost]
41+
127.0.0.1
42+
```
43+
* `cd ~/writing_analysis/configuration`.
44+
* Run `sudo ansible-playbook local.yaml`. This may take a while on an EC2 nanon machine.
45+
If all goes well, you should see an output with no errors, like this:
46+
```
47+
bash
48+
...
49+
PLAY RECAP ******************************************************************************************
50+
127.0.0.1 : ok=5 changed=4 unreachable=0 failed=0
51+
```
52+
* Navigate to http://{ec2_ip}; you should see the message "Welcome to nginx!" if it's working.
53+
54+
## Obtain a free domain name
55+
* Go to noip.com.
56+
* Sign up
57+
58+
## Obtain a free SSL Certificate Using Certbot
59+
* Run the following commands:
60+
```bash
61+
sudo apt-get install software-properties-common
62+
Sudo add-apt-repository universe
63+
sudo add-apt-repository ppa:certbot/certbot
64+
sudo apt-get update
65+
sudo apt-get install certbot python-certbot-nginx
66+
```
67+
```
68+
bash
69+
sudo certbot --nginx
70+
```
71+
-- Put in your {mydomain}.hopto.org address.
72+
-- Choose 1 - no redirect.
73+
74+
## Stand up a backend server on the EC2 instance.

‎devops/tasks/remote_scripts/gitpaths.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ def gitpath_to_name(packagepath):
1010
'''
1111
Convert a git path to the name of the repo. For example:
1212
13-
`https://github.com/ETS-Next-Gen/writing_observer.git` ==> `writing_observer`
13+
`https://github.com/ArgLab/writing_observer.git` ==> `writing_observer`
1414
'''
1515
package = os.path.split(packagepath)[1]
1616
if package.endswith(".git"):

0 commit comments

Comments
 (0)