From 8bd7f9edecb04986c5a4798715aed8d815680c87 Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Wed, 30 Oct 2024 11:31:05 +0700 Subject: [PATCH] feat: annual statistics for reporting --- script/statistics/annual-statistics.inc.php | 28 +++++++++++++++ script/statistics/annual.php | 32 +++++++++++++++++ tools/db/build/annual-statistics.sql | 40 +++++++++++++++++++++ tools/db/build/build.inc.php | 1 + 4 files changed, 101 insertions(+) create mode 100644 script/statistics/annual-statistics.inc.php create mode 100644 script/statistics/annual.php create mode 100644 tools/db/build/annual-statistics.sql diff --git a/script/statistics/annual-statistics.inc.php b/script/statistics/annual-statistics.inc.php new file mode 100644 index 0000000..40f2ced --- /dev/null +++ b/script/statistics/annual-statistics.inc.php @@ -0,0 +1,28 @@ +prepare('EXEC sp_annual_statistics :prmStartDate, :prmEndDate'); + + $stmt->bindParam(":prmStartDate", $startDate); + $stmt->bindParam(":prmEndDate", $endDate); + + $stmt->execute(); + $data = $stmt->fetchAll()[0]; + $data = array_filter($data, "Keyman\\Site\\com\\keyman\\api\\filter_columns_by_name", ARRAY_FILTER_USE_KEY ); + return $data; + } +} diff --git a/script/statistics/annual.php b/script/statistics/annual.php new file mode 100644 index 0000000..fe617bd --- /dev/null +++ b/script/statistics/annual.php @@ -0,0 +1,32 @@ +execute($mssql, $startDate, $endDate); + json_print($data); diff --git a/tools/db/build/annual-statistics.sql b/tools/db/build/annual-statistics.sql new file mode 100644 index 0000000..5d04e97 --- /dev/null +++ b/tools/db/build/annual-statistics.sql @@ -0,0 +1,40 @@ +/* + * Keyman is copyright (C) SIL Global. MIT License. + * + * Basic annual statistics for SIL reports -- SQL Query + */ + +/* + Some rough notes: + + * We have, in our cloud database keyboards + * Of these, are listed as "not obsolete". Obsolete + keyboards are keyboards which have been renamed and for which there is a new + version, or keyboards which are non-Unicode. + * We updated keyboards from startDate-endDate, according + to each keyboard's last update date. This can be anything from a metadata + change to significant keyboard rewrite. + * We list languages today, for + language:keyboard pairs. Many keyboards support more than one language. + * We list lexical models. + * lists the total number of downloads of keyboards + through keyman.com over the last year. This does not match the number of + users or keyboards in use, but gives a rough volume. +*/ + +DROP PROCEDURE IF EXISTS sp_annual_statistics; +GO + +CREATE PROCEDURE sp_annual_statistics ( + @prmStartDate DATE, + @prmEndDate DATE +) AS + +SELECT + (select count(*) from k0.t_keyboard) AS AllKeyboards, + (select count(*) from k0.t_keyboard where obsolete = 0) AS CurrentKeyboards, + (select count(*) from k0.t_keyboard where last_modified >= @prmStartDate and last_modified < @prmEndDate) AS ModifiedKeyboards, + (select count(distinct tag) from k0.t_keyboard_langtag) AS LanguageCount, + (select count(*) from k0.t_keyboard_langtag) AS LanguageKeyboardPairs, + (select count(*) from k0.t_model) AS LexicalModelCount, + (select sum(count) from kstats.t_keyboard_downloads WHERE statdate >= @prmStartDate AND statdate < @prmEndDate) RawKeyboardDownloadCount diff --git a/tools/db/build/build.inc.php b/tools/db/build/build.inc.php index 2f5c654..c7963d2 100644 --- a/tools/db/build/build.inc.php +++ b/tools/db/build/build.inc.php @@ -95,6 +95,7 @@ function BuildDatabase($DBDataSources, $schema, $do_force) { $this->sqlrun($script); } + $this->sqlrun(dirname(__FILE__)."/annual-statistics.sql"); $this->sqlrun(dirname(__FILE__)."/model-queries.sql"); $this->sqlrun(dirname(__FILE__)."/legacy-queries.sql"); $this->sqlrun(dirname(__FILE__)."/legacy-statistics.sql");