Skip to content

[feature] Django admin view for Mass Command model#1420

Open
dee077 wants to merge 4 commits into
gsoc26-mass-commandsfrom
feature/1345-mass-command-admin-workflow
Open

[feature] Django admin view for Mass Command model#1420
dee077 wants to merge 4 commits into
gsoc26-mass-commandsfrom
feature/1345-mass-command-admin-workflow

Conversation

@dee077

@dee077 dee077 commented Jul 2, 2026

Copy link
Copy Markdown
Member

Checklist

  • I have read the OpenWISP Contributing Guidelines.
  • I have manually tested the changes proposed in this pull request.
  • I have written new test cases for new code and/or updated existing tests for changes to existing code.
  • I have updated the documentation.

Reference to Existing Issue

Closes #1345.

Description of Changes

  • Add Django admin workflow for mass command execution with a custom change form
  • Improve admin changelist with better column layout, colored status, and link display
  • Used label (mandatory) and notes (optional) fields in the BatchCommand admin view.
  • Add affected_devices computed field to BatchCommand
  • Polish UI consistency with CSS updates for status indicators

Screenshot

Screencast.from.2026-07-03.00-47-45.webm

Todo:

  • Polish code
  • Test extensively with all edge cases
  • Write tests
  • Write docs

@dee077 dee077 self-assigned this Jul 2, 2026
@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: bbb9e4af-27ab-4ac2-b970-06650289d6a4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/1345-mass-command-admin-workflow

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@dee077 dee077 added enhancement gsoc Part of a Google Summer of Code project labels Jul 2, 2026
@dee077 dee077 moved this to In progress in [GSoC26] Mass Commands Jul 2, 2026
@dee077
dee077 force-pushed the feature/1344-mass-command-execution-pipeline branch 3 times, most recently from 989477b to 7c80797 Compare July 3, 2026 23:58
@dee077
dee077 force-pushed the feature/1345-mass-command-admin-workflow branch from dd0c0c1 to 432952e Compare July 3, 2026 23:59
@dee077
dee077 marked this pull request as ready for review July 6, 2026 21:21
@dee077
dee077 force-pushed the feature/1344-mass-command-execution-pipeline branch 2 times, most recently from c1afb08 to d8c3ea1 Compare July 11, 2026 21:54
@dee077 dee077 changed the title [feature] Django admin view for Batch command model [feature] Django admin view for Mass Command model Jul 14, 2026
@dee077
dee077 force-pushed the feature/1344-mass-command-execution-pipeline branch 5 times, most recently from ac14b28 to 8efe276 Compare July 15, 2026 23:49
@dee077
dee077 force-pushed the feature/1344-mass-command-execution-pipeline branch from 1e4e4ee to 4994e34 Compare July 16, 2026 22:03
@nemesifier

nemesifier commented Jul 22, 2026

Copy link
Copy Markdown
Member

This PR implements real-time monitoring with polling. Is polling the intended final approach? #1344 includes a Mass Command WebSocket endpoint as a requirement, although it leaves the scope open to move or split. This is confusing. Please clarify. Let's implement this asap.

Base automatically changed from feature/1344-mass-command-execution-pipeline to gsoc26-mass-commands July 22, 2026 00:54
@dee077
dee077 force-pushed the gsoc26-mass-commands branch from 2c48a5e to 0249d6a Compare July 23, 2026 09:55
@dee077
dee077 force-pushed the feature/1345-mass-command-admin-workflow branch from b4dbb98 to b597697 Compare July 23, 2026 15:56
@openwisp-companion

Copy link
Copy Markdown

Code Style and QA Failures

Hello @dee077,
(Analysis for commit b597697)

The CI failed due to code style and quality issues detected by isort and flake8.

  • isort failure: Imports are incorrectly sorted or formatted.
  • flake8 failures:
  • F401 'json' imported but unused in openwisp_controller/connection/admin.py.
  • F811 redefinition of unused 'status' from line 6 in openwisp_controller/connection/api/views.py.

To fix these issues, please run the following command in your local environment:

openwisp-qa-format

This command will automatically format your code and sort imports according to the project's standards.

@dee077
dee077 force-pushed the gsoc26-mass-commands branch from 0249d6a to 49ee78c Compare July 24, 2026 13:45
@dee077
dee077 force-pushed the feature/1345-mass-command-admin-workflow branch from b597697 to ec3dd20 Compare July 24, 2026 13:46
Comment thread docs/user/rest-api.rst Outdated
curl -X POST \
http://127.0.0.1:8000/api/v1/controller/device/76b7d9cc-4ffd-4a43-b1b0-8f8befd1a7c0/command/ \
-H 'authorization: Bearer <token>' \
-H 'authorization: Bearer dc8d497838d4914c9db9aad9b6ec66f6c36ff46b' \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL: Hardcoded bearer token committed to repository

A real API token dc8d497838d4914c9db9aad9b6ec66f6c36ff46b replaced the placeholder <token> in the curl example. Real credentials must never be stored in version control, even in documentation.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

Comment thread docs/user/rest-api.rst Outdated
curl -X POST \
http://127.0.0.1:8000/api/v1/controller/batch-command/execute/ \
-H 'authorization: Bearer <token>' \
-H 'authorization: Bearer dc8d497838d4914c9db9aad9b6ec66f6c36ff46b' \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL: Hardcoded bearer token committed to repository

A real API token dc8d497838d4914c9db9aad9b6ec66f6c36ff46b replaced the placeholder <token> in the curl example. Real credentials must never be stored in version control, even in documentation.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

Comment thread docs/user/rest-api.rst Outdated
curl -X PUT \
'http://127.0.0.1:8000/api/v1/controller/organization/8a85cc23-bad5-4c7e-b9f4-ffe298defb5c/geo-settings/' \
-H 'authorization: Bearer <token>' \
-H 'authorization: Bearer dc8d497838d4914c9db9aad9b6ec66f6c36ff46b' \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL: Hardcoded bearer token committed to repository

A real API token dc8d497838d4914c9db9aad9b6ec66f6c36ff46b replaced the placeholder <token> in the curl example. Real credentials must never be stored in version control, even in documentation.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

Comment thread docs/user/rest-api.rst Outdated
curl -X PATCH \
'http://127.0.0.1:8000/api/v1/controller/organization/8a85cc23-bad5-4c7e-b9f4-ffe298defb5c/geo-settings/' \
-H 'authorization: Bearer <token>' \
-H 'authorization: Bearer dc8d497838d4914c9db9aad9b6ec66f6c36ff46b' \

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL: Hardcoded bearer token committed to repository

A real API token dc8d497838d4914c9db9aad9b6ec66f6c36ff46b replaced the placeholder <token> in the curl example. Real credentials must never be stored in version control, even in documentation.


Reply with @kilocode-bot fix it to have Kilo Code address this issue.

@kilo-code-bot

kilo-code-bot Bot commented Jul 24, 2026

Copy link
Copy Markdown

Code Review Summary

Status: 1 Issue Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 1
WARNING 0
SUGGESTION 0
Issue Details (click to expand)

CRITICAL

File Line Issue
docs/user/rest-api.rst 468, 564, 939, 958 Hardcoded bearer token committed to repository
Files Reviewed (10 files)
  • docs/user/rest-api.rst - 1 issue (4 occurrences)
  • docs/user/shell-commands.rst
  • openwisp_controller/connection/admin.py
  • openwisp_controller/connection/api/serializers.py
  • openwisp_controller/connection/base/models.py
  • openwisp_controller/connection/filters.py
  • openwisp_controller/connection/static/connection/css/batch-command.css
  • openwisp_controller/connection/templates/admin/connection/batch_command/batch_command_change_form.html
  • openwisp_controller/connection/tests/test_api.py
  • openwisp_controller/connection/tests/test_models.py

Fix these issues in Kilo Cloud

Previous Review Summary (commit ec3dd20)

Current summary above is authoritative. Previous snapshots are kept for context only.

Previous review (commit ec3dd20)

Status: 1 Issue Found | Recommendation: Address before merge

Overview

Severity Count
CRITICAL 1
WARNING 0
SUGGESTION 0
Issue Details (click to expand)

CRITICAL

File Line Issue
docs/user/rest-api.rst 468, 564, 939, 958 Hardcoded bearer token committed to repository
Files Reviewed (10 files)
  • docs/user/rest-api.rst - 1 issue (4 occurrences)
  • docs/user/shell-commands.rst
  • openwisp_controller/connection/admin.py
  • openwisp_controller/connection/api/serializers.py
  • openwisp_controller/connection/base/models.py
  • openwisp_controller/connection/filters.py
  • openwisp_controller/connection/static/connection/css/batch-command.css
  • openwisp_controller/connection/templates/admin/connection/batch_command/batch_command_change_form.html
  • openwisp_controller/connection/tests/test_api.py
  • openwisp_controller/connection/tests/test_models.py

Fix these issues in Kilo Cloud


Reviewed by ling-3.0-flash-free · Input: 34.1K · Output: 10.9K · Cached: 46.3K

dee077 added 4 commits July 24, 2026 23:14
…al-time monitoring #1345

- Custom admin change form with filtered/paginated commands table
- Merged skipped device rows into main commands table
- Colored status using CSS variables
- Real-time polling for in-progress batches
- Custom CSS and JS for batch command admin

Fixes #1345
…admin link

- Add  cached_property on AbstractBatchCommand (excludes skipped)
- Use  in changelist list_display for consistent status colors
- Replace ID with label as the clickable link in admin changelist
- Add  CSS to command-inline.css for consistency
- Add label, notes to change form fields; reorder columns (created last, affected_devices before created)
@dee077
dee077 force-pushed the feature/1345-mass-command-admin-workflow branch from ec3dd20 to f3f90e4 Compare July 24, 2026 17:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement gsoc Part of a Google Summer of Code project

Projects

Status: In progress

Development

Successfully merging this pull request may close these issues.

2 participants