Lakshya

लक्ष्य

Workforce productivity intelligence

Sign in

Forgot password?

Need help? Contact your administrator.

Reset your password

Enter your username — if it matches an active account we'll send a one-time reset link to your email on file.

Change password

Lakshya
Team — today Leaderboard Schedule vs productivity Org chart Auto-groups Alerts My data
Responsibilities Needs review RDS sessions
Employees Categories Shifts Holidays Bucket weights Title keywords System settings Office settings Integrations Agent rollout
Health Audit log
My data

Team — today

⬇ Excel ⬇ PDF

EmployeeDeptScore ActiveIdle Resp. progressLateMisuse
← back

Last 15 days

Delivery

Last 15 days — daily breakdown

DayScoreActiveProductive PersonalIdleMisuse

Today's top apps

AppActiveIdleTotal BucketTag

Today's top domains

DomainActiveIdleTotal BucketTag

Today's top window titles

Visible for any non-idle activity, useful for seeing which pages/documents an employee opened when the URL itself couldn't be captured.

Started Window title Time

Responsibilities

TitlePriorityStatus ProgressDue

Org chart

Reporting hierarchy. Click ▸ to expand a manager's direct reports; click a name to open their detail tab. Default expansion is 2 levels — your last expand/collapse state is remembered per-browser. Filters dim non-matching nodes (the tree shape stays so you can still navigate around).

Unassigned — click to expand

Active employees with no manager set. Assign them on Manage → Employees to bring them into the tree.

    Schedule vs productivity

    Compares actual productive time against the expected time defined by each employee's shift. Ratio is weighted (uses the bucket weights from Manage → Bucket weights), so e.g. learning time partially counts. Holidays / weekends / admin-marked exempt days have expected = 0 and don't drag the average down.

    NameDepartment Ratio In-shift Weighted After-hours Late Early-leave Expected

    Best & worst — last 7 days

    Score = (productive + 0.5×learning − personal) ÷ active time, mapped to 0–100. Excludes employees with under 10 minutes of activity in the window. Security-risk time is shown separately as alerts — not deducted.

    ⬇ Excel ⬇ PDF

    Auto-groups — last 14 days

    Rule-based, transparent. Each membership shows the reason — useful for defending decisions in 1:1s.

    Needs review

    Apps, domains, and browser titles that have accumulated active time but aren't classified into a bucket yet. Tag them here once and they apply retroactively to every employee.

    Uncategorized domains

    Browser visits where the domain is known but no rule matches. Pick a bucket → re-classifies all matching events.

    DomainActive timeEvents PeopleTag as

    Uncategorized apps

    Desktop apps with no rule match.

    AppActive timeEvents PeopleTag as

    Browser titles with no domain extracted

    Pages we couldn't auto-recognise. Click a title's Add keyword button to have the title-extractor recognise that site in future events. Choose a 2–3 word substring that's distinctive (e.g. HRMS Login) and a target domain.

    Window titleActive timeEvents Suggest domain & tag

    My data

    Your own activity at a glance.

    Account

    Sets a new password and signs out all your other sessions.

    Export

    Includes: activity events, daily summaries, and any RDS sessions linked to your account.

    System health

    Audit log

    Every privileged action — grants, revokes, role changes, category re-tags, OMS syncs, retention runs.

    Time (UTC)ActorAction TargetIPDetail

    Integrations

    Test the alert pipeline

    Fires a synthetic alert through every configured webhook and (if SMTP is set) emails admins. Use this to verify your integrations after editing them.

    Webhooks (alert push)

    Each new alert is POSTed as JSON to every active matching webhook. Use this to fan out into Slack, Teams, or your ticketing system.

    NameURLSeverity Last firedLast status

    Per-role bucket weights

    Multiplier on the base bucket weight for a specific role. e.g. "Developer + productive × 1.5" makes IDE-time count more on the leaderboard for devs. Default = 1.0.

    RoleBucket×

    Data retention

    Delete activity_events older than N days. Daily summaries are kept indefinitely.

    Agent self-update

    Server's current published version is shown below. /v1/agent/download serves the bundled exe.

    
        

    Responsibilities & delivery

    EmployeeTitlePriStatus ProgressDueLate?

    Alerts

    WhenEmployeeKindSeverity Message

    Active RDS thin-client sessions (Windows 2012)

    Maps server\session_id -> AD user -> employee record.

    ServerSessionAD User Client nameClient IP Mapped employeeStarted

    Employees — Windows login mapping

    The OMS Windows login column is what your OMS reports (LOWER(sec_users.login)). The Override column is a manual mapping — useful when an employee's actual Windows account name doesn't match the OMS login (e.g. administrator, service.user). Override wins during agent matching and survives OMS re-syncs.

    ⬇ Excel ⬇ PDF

    NameCodeEmailDeptRole OfficeDevice OMS Windows login Override Shift Manager Status Monitor Dashboard access

    Windows agent — build & deploy

    Download these files to a Windows machine, run the build script, then install the resulting empmonitor_agent.exe on each RDS host. The agent reports back to ….

    One-click bundle

    Everything needed to build & deploy, packed into a single zip with a README:

    ⬇ Download empmonitor_agent_bundle.zip

    Or download files individually

    FileSizePurpose

    Quick start (after you download)

    # 1. On a Windows machine with Python 3.9+ in PATH:
    Set-ExecutionPolicy -Scope Process Bypass
    .\agent\build_windows.ps1
    # Output: dist\empmonitor_agent.exe
    
    # 2. On each RDS host, copy the exe + install_agent.ps1, then as Administrator:
    .\install_agent.ps1 -ServerUrl "http://192.168.0.131:8090"
    # Agent now starts at every user logon and reports its session to this server.

    Category rules

    KindPatternCategoryScore

    Shifts

    Recurring time windows that define expected on-the-clock hours. Each employee inherits the default shift unless overridden on the Employees page. Productivity ratios on the Schedule dashboard use these windows.

    Each shift now belongs to an office (or company-wide if blank), and has an effective from date. When computing for an employee on a given day, the system picks the most-recent active shift for their office whose effective_from ≤ that day, falling back to the company-wide shift if none.

    NameOfficeEffective from StartEndLunchDays BreakTZDefaultStatus

    Holidays

    Days where expected_s is forced to 0 — so the productivity ratio reads as "off-day" rather than 0%. Leave Office blank for company-wide holidays; otherwise it must match the Employee.office string (e.g. Udupi).

    DateOfficeName

    Title keywords

    Maps a substring in a browser-window title to its canonical domain. Used by the title extractor to recognise sites like "Stack Overflow - Where Developers ..." → stackoverflow.com. Higher priority is checked first; keep more-specific keywords above generic ones.

    Test a title
    KeywordTarget domainPriority Active

    Office settings

    Per-office effective_date — the date from which monitoring is "live" in that location. Days before this date are excluded from expected_s and from auto-leave for employees in that office. Offices with no row here use the global default on the System settings page.

    OfficeEffective dateStatus

    Add a new office

    Use this only for offices not yet on any employee record. Otherwise the office is auto-listed above.

    System settings

    Configuration that affects how the productivity ratio is computed across the company.

    Flagging thresholds

    Two independent rules. Each can fire on its own — an employee can be flagged for unproductive use, for excess idle, or for both. Changes take effect on the next recompute (overnight, or run a manual recompute from Health).

    How this is calculated

    Each activity_event from the agent has a duration (typically 5 s) and a bucket (productive / learning / communication / neutral / personal / security_risk) plus an idle bit. The recompute aggregates these per employee per day:

    • productive_s — Σ duration where productivity > 0 (productive bucket).
    • unproductive_s — Σ duration where productivity < 0 (default: personal bucket; weights are admin-editable).
    • neutral_s — Σ duration where productivity = 0.
    • idle_s — Σ duration where the idle bit is set (no keyboard/mouse activity for the agent's idle window).
    • active_s = productive + unproductive + neutral (idle is excluded).

    Unproductive flag fires when both: active_s ≥ min_active_minutes × 60 AND unproductive_s / active_s ≥ unproductive_ratio.

    Idle flag fires when idle_s / 3600 ≥ idle_excess_hours.

    The two flags are independent. The legacy combined misuse_flag is recomputed as unproductive_flag OR idle_flag and kept around for backward compatibility with older queries.

    Bucket weights

    Weights applied to every second of activity time when computing the daily productivity score. Negative weights deduct (e.g. personal). Typical range is -1.0 to +1.0; nothing rejects values outside that range — pick what makes sense for your formula.