mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
253 lines
6.8 KiB
JavaScript
253 lines
6.8 KiB
JavaScript
|
/**
|
||
|
* File for configuring the metric collection bucket duration, data push intervals between client, server,
|
||
|
* and Grist Metrics EC2 instance, as well as individual metrics collected in the client and server.
|
||
|
*/
|
||
|
|
||
|
// Time interval settings (ms)
|
||
|
exports.BUCKET_SIZE = 60 * 1000;
|
||
|
|
||
|
exports.CLIENT_PUSH_INTERVAL = 120 * 1000;
|
||
|
exports.SERVER_PUSH_INTERVAL = 120 * 1000;
|
||
|
exports.MAX_PENDING_BUCKETS = 40;
|
||
|
exports.CONN_RETRY = 20 * 1000;
|
||
|
|
||
|
// Metrics use the general form:
|
||
|
// <category>.<short desc>
|
||
|
// With prefixes, measurement type, and clientId/serverId added automatically on send.
|
||
|
|
||
|
// 'type' is the measurement tool type, with options 'Switch', 'Counter', 'Gauge', 'Timer', and
|
||
|
// 'ExecutionTimer'. (See metricTools.js for details)
|
||
|
// Suffixes are added to the metric names depending on their measurement tool.
|
||
|
// 'Switch' => '.instances'
|
||
|
// 'Gauge' => '.total'
|
||
|
// 'Counter' => '.count'
|
||
|
// 'Timer' => '.time'
|
||
|
// 'ExecutionTimer' => '.execution_time', '.count' (Execution timer automatically records a count)
|
||
|
|
||
|
exports.clientMetrics = [
|
||
|
// General
|
||
|
{
|
||
|
name: 'sidepane.opens',
|
||
|
type: 'Counter',
|
||
|
desc: 'Number of times the side pane is opened'
|
||
|
},
|
||
|
{
|
||
|
name: 'app.client_active_span',
|
||
|
type: 'Timer',
|
||
|
desc: 'Total client time spent using grist'
|
||
|
},
|
||
|
{
|
||
|
name: 'app.connected_to_server_span',
|
||
|
type: 'Timer',
|
||
|
desc: 'Total time spent connected to the server'
|
||
|
},
|
||
|
{
|
||
|
name: 'app.disconnected_from_server_span',
|
||
|
type: 'Timer',
|
||
|
desc: 'Total time spent disconnected from the server'
|
||
|
},
|
||
|
// Docs
|
||
|
{
|
||
|
name: 'docs.num_open_6+_tables',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of open docs with more than 5 tables'
|
||
|
},
|
||
|
{
|
||
|
name: 'docs.num_open_0-5_tables',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of open docs with 0-5 tables'
|
||
|
},
|
||
|
// Tables
|
||
|
{
|
||
|
name: 'tables.num_tables',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of open tables'
|
||
|
},
|
||
|
{
|
||
|
name: 'tables.num_summary_tables',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of open sections in the current view'
|
||
|
},
|
||
|
// Views
|
||
|
{
|
||
|
name: 'views.code_view_open_span',
|
||
|
type: 'Timer',
|
||
|
desc: 'Time spent with code viewer open'
|
||
|
},
|
||
|
// Sections
|
||
|
{
|
||
|
name: 'sections.grid_open_span',
|
||
|
type: 'Timer',
|
||
|
desc: 'Time spent with gridview open'
|
||
|
},
|
||
|
{
|
||
|
name: 'sections.detail_open_span',
|
||
|
type: 'Timer',
|
||
|
desc: 'Time spent with gridview open'
|
||
|
},
|
||
|
{
|
||
|
name: 'sections.num_grid_sections',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of open sections in the current view'
|
||
|
},
|
||
|
{
|
||
|
name: 'sections.num_detail_sections',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of open sections in the current view'
|
||
|
},
|
||
|
{
|
||
|
name: 'sections.num_chart_sections',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of open sections in the current view'
|
||
|
},
|
||
|
{
|
||
|
name: 'sections.multiple_open_span',
|
||
|
type: 'Timer',
|
||
|
desc: 'Time spent with multiple sections open'
|
||
|
},
|
||
|
// Performance
|
||
|
{
|
||
|
name: 'performance.server_action',
|
||
|
type: 'ExecutionTimer',
|
||
|
desc: 'Time for a server action to complete'
|
||
|
},
|
||
|
{
|
||
|
name: 'performance.doc_load',
|
||
|
type: 'ExecutionTimer',
|
||
|
desc: 'Time to load a document'
|
||
|
},
|
||
|
// Columns
|
||
|
{
|
||
|
name: 'cols.num_formula_cols',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of formula columns in open documents'
|
||
|
},
|
||
|
{
|
||
|
name: 'cols.num_text_cols',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of text columns in open documents'
|
||
|
},
|
||
|
{
|
||
|
name: 'cols.num_int_cols',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of integer columns in open documents'
|
||
|
},
|
||
|
{
|
||
|
name: 'cols.num_numeric_cols',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of numeric columns in open documents'
|
||
|
},
|
||
|
{
|
||
|
name: 'cols.num_date_cols',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of date columns in open documents'
|
||
|
},
|
||
|
{
|
||
|
name: 'cols.num_datetime_cols',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of datetime columns in open documents'
|
||
|
},
|
||
|
{
|
||
|
name: 'cols.num_ref_cols',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of reference columns in open documents'
|
||
|
},
|
||
|
{
|
||
|
name: 'cols.num_attachments_cols',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Number of attachments columns in open documents'
|
||
|
},
|
||
|
{
|
||
|
name: 'performance.front_end_errors',
|
||
|
type: 'Counter',
|
||
|
desc: 'Number of frontend errors'
|
||
|
}
|
||
|
// TODO: Implement the following:
|
||
|
// {
|
||
|
// name: 'grist-rt.performance.view_swap',
|
||
|
// type: 'ExecutionTimer',
|
||
|
// desc: 'Time to swap views'
|
||
|
// }
|
||
|
];
|
||
|
|
||
|
exports.serverMetrics = [
|
||
|
// General
|
||
|
{
|
||
|
name: 'app.server_active',
|
||
|
type: 'Switch',
|
||
|
desc: 'Number of users currently using grist'
|
||
|
},
|
||
|
{
|
||
|
name: 'app.server_active_span',
|
||
|
type: 'Timer',
|
||
|
desc: 'Total server time spent using grist'
|
||
|
},
|
||
|
{
|
||
|
name: 'app.have_doc_open',
|
||
|
type: 'Switch',
|
||
|
desc: 'Number of users with at least one doc open'
|
||
|
},
|
||
|
{
|
||
|
name: 'app.doc_open_span',
|
||
|
type: 'Timer',
|
||
|
desc: 'Total time spent with at least one doc open'
|
||
|
},
|
||
|
// Docs
|
||
|
{
|
||
|
name: 'docs.num_open',
|
||
|
type: 'Gauge',
|
||
|
desc: 'Number of open docs'
|
||
|
},
|
||
|
{
|
||
|
name: 'performance.node_memory_usage',
|
||
|
type: 'SamplingGauge',
|
||
|
desc: 'Memory utilization in bytes of the node process'
|
||
|
}
|
||
|
// TODO: Implement the following:
|
||
|
// {
|
||
|
// name: 'grist-rt.docs.total_size_open',
|
||
|
// type: 'Gauge',
|
||
|
// desc: 'Cumulative size of open docs'
|
||
|
// }
|
||
|
// {
|
||
|
// name: 'grist-rt.performance.open_standalone_app',
|
||
|
// type: 'ExecutionTimer',
|
||
|
// desc: 'Time to start standalone app'
|
||
|
// }
|
||
|
// {
|
||
|
// name: 'grist-rt.performance.sandbox_recalculation',
|
||
|
// type: 'ExecutionTimer',
|
||
|
// desc: 'Time for sandbox recalculation to occur'
|
||
|
// }
|
||
|
// {
|
||
|
// name: 'grist-rt.performance.open_standalone_app',
|
||
|
// type: 'ExecutionTimer',
|
||
|
// desc: 'Time to start standalone app'
|
||
|
// }
|
||
|
// {
|
||
|
// name: 'grist-rt.performance.node_cpu_usage',
|
||
|
// type: 'SamplingGauge',
|
||
|
// desc: 'Amount of time node was using the cpu in the interval'
|
||
|
// }
|
||
|
// {
|
||
|
// name: 'grist-rt.performance.sandbox_cpu_usage',
|
||
|
// type: 'SamplingGauge',
|
||
|
// desc: 'Amount of time the sandbox was using the cpu in the interval'
|
||
|
// }
|
||
|
// {
|
||
|
// name: 'grist-rt.performance.chrome_cpu_usage',
|
||
|
// type: 'SamplingGauge',
|
||
|
// desc: 'Amount of time chrome was using the cpu in the interval'
|
||
|
// }
|
||
|
// {
|
||
|
// name: 'grist-rt.performance.sandbox_memory_usage',
|
||
|
// type: 'SamplingGauge',
|
||
|
// desc: 'Memory utilization in bytes of the sandbox process'
|
||
|
// }
|
||
|
// {
|
||
|
// name: 'grist-rt.performance.chrome_memory_usage',
|
||
|
// type: 'SamplingGauge',
|
||
|
// desc: 'Memory utilization in bytes of the chrome process'
|
||
|
// }
|
||
|
];
|