SmartData.Console

Embedded admin console — routes, options, auth surface.


Embedded MVC admin console. ASP.NET Core + Razor + HTMX + Tailwind. Routes under /{RoutePrefix}/ (default /console/). How-to: Use the admin console.

Namespaces at a glance

Folder Contents
Controllers/ ConsoleBase, Auth, Console, Database, Table, Users, System, Scheduler, Settings
Models/ View models — dashboard, data grid, schema, query, backups, users, logs, storage, metrics, exceptions, traces, scheduler, settings
Views/ Razor views grouped by controller; shared layout/sidebar/breadcrumb/tabs partials
Services/ ConsoleAuthService, PasswordHasher (PBKDF2-SHA256, 100k iterations, 16-byte salt)
Middleware/ ConsoleAuthMiddleware — cookie-based session auth
wwwroot/js/ query-builder.js, backup-upload.js

Routing is rewritten at startup via ConsoleRoutePrefixConvention (IApplicationModelConvention) — controller templates declared as /console/... become /{RoutePrefix}/....

Registration

services.AddSmartDataConsole(o =>
{
    o.AllowInProduction = false;   // default — disabled outside Development
    o.RoutePrefix       = "console";
});

app.UseSmartDataConsole();        // auth middleware

// host is responsible:
app.MapStaticAssets();
app.MapControllers();

AddSmartDataConsole registers ConsoleAuthService, ConsoleRoutes, ConsoleOptions, and scans controllers from the Console assembly.

ConsoleOptions

Property Default Notes
AllowInProduction false Disabled outside Development unless enabled explicitly.
RoutePrefix "console" Base path segment.

Routes

Auth

Route Method Notes
/console/login GET / POST Login form; POST authenticates via sp_login, sets sd_console_token HttpOnly cookie.
/console/logout POST Clears cookie; calls sp_logout.

Dashboard

Route Method Notes
/console GET Health, metrics, recent exceptions, database overview.

Database

Route Method Notes
/console/db/{db} GET Details tab.
/console/db/{db}/tables GET Tables list tab.
/console/db/{db}/backups GET Database-scoped backups.

Tables

Route Method Query Notes
/console/db/{db}/tables/{table} GET limit, offset, orderBy, search Data grid.
/console/db/{db}/tables/{table}/grid GET same Grid partial (HTMX swap).
/console/db/{db}/tables/{table}/rows GET same Infinite-scroll append partial.
/console/db/{db}/tables/{table}/schema GET Columns + indexes.
/console/db/{db}/tables/{table}/query GET Visual query builder.
/console/db/{db}/tables/{table}/query/execute POST Executes via sp_select.
/console/db/{db}/tables/{table}/export GET Export form.
/console/db/{db}/tables/{table}/export/download GET Download rows as JSON.
/console/db/{db}/tables/{table}/import GET JSON upload form.
/console/db/{db}/tables/{table}/import/preview POST Column mapping + row count.
/console/db/{db}/tables/{table}/import/run POST Insert/skip/replace + optional truncate.

Users

Route Method Notes
/console/users GET / POST List / inline create.
/console/users/new GET / POST Form.
/console/users/{id} GET / POST / DELETE Edit form / submit / delete.

Backups

Route Method Notes
/console/backups GET Tabs: backups, history.
/console/backups/history GET History tab.
/console/backups/create POST Submits async create job.
/console/backups/{id} DELETE Deletes backup.
/console/backups/{id}/restore POST Submits async restore.
/console/backups/{id}/download GET Streams .smartbackup.
/console/backups/upload POST Chunked upload (1MB).
/console/backups/jobs/{jobId} GET Status partial (HTMX polls every 1s).
/console/backups/jobs/{jobId}/cancel POST Cancels running job.

Settings

Route Method Notes
/console/settings GET / POST View / save runtime-tunable SmartDataOptions. Startup-only settings (SchemaMode, Index.*) render read-only.

Telemetry

Route Method Query Notes
/console/logs GET type, procedure, search From sp_logs.
/console/storage GET From sp_storage.
/console/procedures GET tab From ProcedureCatalog.
/console/metrics GET tab, name, source Live + historical. From sp_metrics.
/console/exceptions GET type, procedure From sp_exceptions.
/console/traces GET procedure, errorsOnly, minDuration From sp_traces.
/console/traces/{traceId} GET Span tree.

Schedulers

Route Method Notes
/console/schedulers GET sp_schedule_list. Inline toggle + run-now.
/console/schedulers/{id} GET Detail — sp_schedule_get + sp_schedule_preview.
/console/schedulers/{id}/toggle POST sp_schedule_update.
/console/schedulers/{id}/start POST sp_schedule_start.
/console/schedulers/{id}/cancel POST sp_schedule_cancel.
/console/schedulers/{id}/toggle-detail POST sp_schedule_update → returns _DetailBody.
/console/schedulers/{id}/edit POST Updates retry + jitter.
/console/schedulers/history GET sp_schedule_history.
/console/schedulers/stats GET sp_schedule_stats.

HTMX conventions

ConsoleBaseController.PageOrPartial() returns a full page for standard requests and a partial when HX-Request is present.

Pattern Markup
Content navigation hx-get + hx-target="#content" + hx-push-url="true"
Form submit hx-post + hx-target
Infinite scroll hx-get="/rows?offset=N" hx-trigger="intersect once" hx-swap="afterend"
Search debounce hx-trigger="input changed delay:300ms"
Job polling hx-get="/console/backups/jobs/{id}" hx-trigger="every 1s" hx-swap="outerHTML" (self-replacing; stops polling on terminal status)

Authentication

  • ConsoleAuthMiddleware gates all /console/* routes except /console/login + static assets.
  • Cookie sd_console_token — HttpOnly, random 32-byte token.
  • ConsoleAuthService maps console token → ConsoleSession(Username, ServerToken, CreatedAt).
  • Session TTL from SessionOptions.SessionTtl. Expiration checked on access (no separate cleanup service).
  • ServerToken is what's passed to IAuthenticatedProcedureService — real auth lives in SessionManager.

Client-side JS

File Purpose
query-builder.js Builds JSON filter from dynamic rows. Operators: $eq, $ne, $gt, $gte, $lt, $lte, $contains, $starts, $ends, $like, $in, $nin, $null, $notnull. Casts by column type.
backup-upload.js 1MB chunked upload to /console/backups/upload. Cancel + resume from last offset. Refreshes list via HTMX on completion.

Styling

Tailwind CDN + Material Symbols Outlined. Inter (body), JetBrains Mono (code/data). Utility classes only — no stylesheets.