feat(workforce): add ClickHouse workforce analytics contour

This commit is contained in:
igor04091968
2026-06-23 21:52:57 +03:00
parent 341799ff9d
commit 337da4bb5f
44 changed files with 3973 additions and 461 deletions
@@ -0,0 +1,105 @@
CREATE OR REPLACE VIEW aw_workforce.v_workforce_productivity_daily AS
SELECT
event_date,
branch,
department,
activity_type,
category,
productivity_class,
sum(duration_sec) AS duration_sec,
sum(event_count) AS event_count,
sum(unknown_subject_events) AS unknown_subject_events,
sum(unknown_category_events) AS unknown_category_events
FROM aw_workforce.agg_workforce_productivity_hourly
GROUP BY
event_date,
branch,
department,
activity_type,
category,
productivity_class;
CREATE OR REPLACE VIEW aw_workforce.v_workforce_unknown_subjects AS
SELECT
host_name,
user_login,
count() AS events,
sum(duration_sec) AS duration_sec
FROM aw_workforce.aw_window_events
WHERE dictGetUInt8OrDefault(
'aw_workforce.dict_workstation_user',
'is_active',
(host_name, user_login),
0
) != 1
OR dictGetStringOrDefault(
'aw_workforce.dict_workstation_user',
'employee_name',
(host_name, user_login),
''
) = ''
GROUP BY
host_name,
user_login
ORDER BY duration_sec DESC;
CREATE OR REPLACE VIEW aw_workforce.v_workforce_unknown_processes AS
SELECT
process_name,
count() AS events,
sum(duration_sec) AS duration_sec
FROM aw_workforce.aw_window_events
WHERE dictGetUInt8OrDefault(
'aw_workforce.dict_application_category',
'is_active',
process_name,
0
) != 1
OR dictGetStringOrDefault(
'aw_workforce.dict_application_category',
'category',
process_name,
''
) IN ('', 'unknown')
GROUP BY process_name
ORDER BY duration_sec DESC;
CREATE OR REPLACE VIEW aw_workforce.v_workforce_unknown_domains AS
WITH
lowerUTF8(
domain(if(position(url, '://') = 0, concat('http://', url), url))
) AS domain_name
SELECT
domain_name,
count() AS events,
sum(duration_sec) AS duration_sec
FROM aw_workforce.aw_browser_events
WHERE domain_name != ''
AND (
dictGetUInt8OrDefault(
'aw_workforce.dict_domain_category',
'is_active',
domain_name,
0
) != 1
OR dictGetStringOrDefault(
'aw_workforce.dict_domain_category',
'category',
domain_name,
''
) IN ('', 'unknown')
)
GROUP BY domain_name
ORDER BY duration_sec DESC;
CREATE OR REPLACE VIEW aw_workforce.v_workforce_unknown_quality_daily AS
SELECT
event_date,
sum(event_count) AS events,
sum(unknown_subject_events) AS unknown_subject_events,
round(unknown_subject_events / nullIf(events, 0), 4) AS unknown_subject_ratio,
sum(unknown_category_events) AS unknown_category_events,
round(unknown_category_events / nullIf(events, 0), 4) AS unknown_category_ratio
FROM aw_workforce.agg_workforce_productivity_hourly
GROUP BY event_date
ORDER BY event_date DESC;