Remove metrics #4
This commit is contained in:
parent
d03e83dd66
commit
a0bc20aeb6
18 changed files with 8 additions and 633 deletions
|
@ -1,171 +0,0 @@
|
|||
const crypto = require('crypto');
|
||||
const fetch = require('node-fetch');
|
||||
const config = require('./config');
|
||||
const pkg = require('../package.json');
|
||||
|
||||
const HOUR = 1000 * 60 * 60;
|
||||
|
||||
function truncateToHour(timestamp) {
|
||||
return Math.floor(timestamp / HOUR) * HOUR;
|
||||
}
|
||||
|
||||
function orderOfMagnitude(n) {
|
||||
return Math.floor(Math.log10(n));
|
||||
}
|
||||
|
||||
function userId(fileId, ownerId) {
|
||||
const hash = crypto.createHash('sha256');
|
||||
hash.update(fileId);
|
||||
hash.update(ownerId);
|
||||
return hash.digest('hex').substring(32);
|
||||
}
|
||||
|
||||
function statUploadEvent(data) {
|
||||
const event = {
|
||||
session_id: -1,
|
||||
country: data.country,
|
||||
region: data.state,
|
||||
user_id: userId(data.id, data.owner),
|
||||
app_version: pkg.version,
|
||||
time: truncateToHour(Date.now()),
|
||||
event_type: 'server_upload',
|
||||
user_properties: {
|
||||
download_limit: data.dlimit,
|
||||
time_limit: data.timeLimit,
|
||||
size: orderOfMagnitude(data.size),
|
||||
anonymous: data.anonymous
|
||||
},
|
||||
event_properties: {
|
||||
agent: data.agent
|
||||
},
|
||||
event_id: 0
|
||||
};
|
||||
return sendBatch([event]);
|
||||
}
|
||||
|
||||
function statDownloadEvent(data) {
|
||||
const event = {
|
||||
session_id: -1,
|
||||
country: data.country,
|
||||
region: data.state,
|
||||
user_id: userId(data.id, data.owner),
|
||||
app_version: pkg.version,
|
||||
time: truncateToHour(Date.now()),
|
||||
event_type: 'server_download',
|
||||
event_properties: {
|
||||
agent: data.agent,
|
||||
download_count: data.download_count,
|
||||
ttl: data.ttl
|
||||
},
|
||||
event_id: data.download_count
|
||||
};
|
||||
return sendBatch([event]);
|
||||
}
|
||||
|
||||
function statDeleteEvent(data) {
|
||||
const event = {
|
||||
session_id: -1,
|
||||
country: data.country,
|
||||
region: data.state,
|
||||
user_id: userId(data.id, data.owner),
|
||||
app_version: pkg.version,
|
||||
time: truncateToHour(Date.now()),
|
||||
event_type: 'server_delete',
|
||||
event_properties: {
|
||||
agent: data.agent,
|
||||
download_count: data.download_count,
|
||||
ttl: data.ttl
|
||||
},
|
||||
event_id: data.download_count + 1
|
||||
};
|
||||
return sendBatch([event]);
|
||||
}
|
||||
|
||||
function clientEvent(
|
||||
event,
|
||||
ua,
|
||||
language,
|
||||
session_id,
|
||||
deltaT,
|
||||
platform,
|
||||
country,
|
||||
state
|
||||
) {
|
||||
const ep = event.event_properties || {};
|
||||
const up = event.user_properties || {};
|
||||
const event_properties = {
|
||||
browser: ua.browser.name,
|
||||
browser_version: ua.browser.version,
|
||||
status: ep.status,
|
||||
|
||||
age: ep.age,
|
||||
downloaded: ep.downloaded,
|
||||
download_limit: ep.download_limit,
|
||||
duration: ep.duration,
|
||||
entrypoint: ep.entrypoint,
|
||||
file_count: ep.file_count,
|
||||
password_protected: ep.password_protected,
|
||||
referrer: ep.referrer,
|
||||
size: ep.size,
|
||||
time_limit: ep.time_limit,
|
||||
trigger: ep.trigger,
|
||||
ttl: ep.ttl,
|
||||
utm_campaign: ep.utm_campaign,
|
||||
utm_content: ep.utm_content,
|
||||
utm_medium: ep.utm_medium,
|
||||
utm_source: ep.utm_source,
|
||||
utm_term: ep.utm_term,
|
||||
experiment: ep.experiment,
|
||||
variant: ep.variant
|
||||
};
|
||||
const user_properties = {
|
||||
active_count: up.active_count,
|
||||
anonymous: up.anonymous,
|
||||
experiments: up.experiments,
|
||||
first_action: up.first_action
|
||||
};
|
||||
return {
|
||||
app_version: pkg.version,
|
||||
country: country,
|
||||
device_id: event.device_id,
|
||||
event_properties,
|
||||
event_type: event.event_type,
|
||||
language,
|
||||
os_name: ua.os.name,
|
||||
os_version: ua.os.version,
|
||||
platform,
|
||||
region: state,
|
||||
session_id,
|
||||
time: event.time + deltaT,
|
||||
user_id: event.user_id,
|
||||
user_properties
|
||||
};
|
||||
}
|
||||
|
||||
async function sendBatch(events, timeout = 1000) {
|
||||
if (!config.amplitude_id) {
|
||||
return 200;
|
||||
}
|
||||
try {
|
||||
const result = await fetch('https://api.amplitude.com/batch', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
api_key: config.amplitude_id,
|
||||
events
|
||||
}),
|
||||
timeout
|
||||
});
|
||||
return result.status;
|
||||
} catch (e) {
|
||||
return 500;
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
statUploadEvent,
|
||||
statDownloadEvent,
|
||||
statDeleteEvent,
|
||||
clientEvent,
|
||||
sendBatch
|
||||
};
|
|
@ -100,16 +100,6 @@ const conf = convict({
|
|||
arg: 'port',
|
||||
env: 'PORT'
|
||||
},
|
||||
amplitude_id: {
|
||||
format: String,
|
||||
default: '',
|
||||
env: 'AMPLITUDE_ID'
|
||||
},
|
||||
analytics_id: {
|
||||
format: String,
|
||||
default: '',
|
||||
env: 'GOOGLE_ANALYTICS_ID'
|
||||
},
|
||||
sentry_id: {
|
||||
format: String,
|
||||
default: '',
|
||||
|
|
|
@ -1,23 +1,10 @@
|
|||
const storage = require('../storage');
|
||||
const { statDeleteEvent } = require('../amplitude');
|
||||
|
||||
module.exports = async function(req, res) {
|
||||
try {
|
||||
const id = req.params.id;
|
||||
const meta = req.meta;
|
||||
const ttl = await storage.ttl(id);
|
||||
await storage.del(id);
|
||||
res.sendStatus(200);
|
||||
statDeleteEvent({
|
||||
id,
|
||||
ip: req.ip,
|
||||
country: req.geo.country,
|
||||
state: req.geo.state,
|
||||
owner: meta.owner,
|
||||
download_count: meta.dl,
|
||||
ttl,
|
||||
agent: req.ua.browser.name || req.ua.ua.substring(0, 6)
|
||||
});
|
||||
} catch (e) {
|
||||
res.sendStatus(404);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
const storage = require('../storage');
|
||||
const mozlog = require('../log');
|
||||
const log = mozlog('send.download');
|
||||
const { statDownloadEvent } = require('../amplitude');
|
||||
|
||||
module.exports = async function(req, res) {
|
||||
const id = req.params.id;
|
||||
|
@ -27,17 +26,6 @@ module.exports = async function(req, res) {
|
|||
|
||||
const dl = meta.dl + 1;
|
||||
const dlimit = meta.dlimit;
|
||||
const ttl = await storage.ttl(id);
|
||||
statDownloadEvent({
|
||||
id,
|
||||
ip: req.ip,
|
||||
country: req.geo.country,
|
||||
state: req.geo.state,
|
||||
owner: meta.owner,
|
||||
download_count: dl,
|
||||
ttl,
|
||||
agent: req.ua.browser.name || req.ua.ua.substring(0, 6)
|
||||
});
|
||||
try {
|
||||
if (dl >= dlimit) {
|
||||
await storage.del(id);
|
||||
|
|
|
@ -112,7 +112,6 @@ module.exports = function(app) {
|
|||
require('./params')
|
||||
);
|
||||
app.post(`/api/info/:id${ID_REGEX}`, auth.owner, require('./info'));
|
||||
app.post('/api/metrics', require('./metrics'));
|
||||
app.get('/__version__', function(req, res) {
|
||||
// eslint-disable-next-line node/no-missing-require
|
||||
res.sendFile(require.resolve('../../dist/version.json'));
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
const { sendBatch, clientEvent } = require('../amplitude');
|
||||
|
||||
module.exports = async function(req, res) {
|
||||
try {
|
||||
const data = JSON.parse(req.body); // see http://crbug.com/490015
|
||||
const deltaT = Date.now() - data.now;
|
||||
const events = data.events.map(e =>
|
||||
clientEvent(
|
||||
e,
|
||||
req.ua,
|
||||
data.lang,
|
||||
data.session_id + deltaT,
|
||||
deltaT,
|
||||
data.platform,
|
||||
req.geo.country,
|
||||
req.geo.state
|
||||
)
|
||||
);
|
||||
const status = await sendBatch(events);
|
||||
res.sendStatus(status);
|
||||
} catch (e) {
|
||||
res.sendStatus(500);
|
||||
}
|
||||
};
|
|
@ -4,7 +4,6 @@ const config = require('../config');
|
|||
const mozlog = require('../log');
|
||||
const Limiter = require('../limiter');
|
||||
const fxa = require('../fxa');
|
||||
const { statUploadEvent } = require('../amplitude');
|
||||
const { encryptedSize } = require('../../app/utils');
|
||||
|
||||
const { Transform } = require('stream');
|
||||
|
@ -108,18 +107,6 @@ module.exports = function(ws, req) {
|
|||
// in order to avoid having to check socket state and clean
|
||||
// up storage, possibly with an exception that we can catch.
|
||||
ws.send(JSON.stringify({ ok: true }));
|
||||
statUploadEvent({
|
||||
id: newId,
|
||||
ip: req.ip,
|
||||
country: req.geo.country,
|
||||
state: req.geo.state,
|
||||
owner,
|
||||
dlimit,
|
||||
timeLimit,
|
||||
anonymous: !user,
|
||||
size: limiter.length,
|
||||
agent: req.ua.browser.name || req.ua.ua.substring(0, 6)
|
||||
});
|
||||
}
|
||||
} catch (e) {
|
||||
log.error('upload', e);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue