realm-object-server
Version:
95 lines • 4.28 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const Server_1 = require("../Server");
const shared_1 = require("../shared");
const realms_1 = require("../realms");
const decorators_1 = require("../decorators");
const os = require("os");
class MixpanelService {
constructor(config) {
this.config = config;
}
start(server) {
server.openRealm(realms_1.AdminRealm).then((adminRealm) => {
this.adminRealm = adminRealm;
}, (error) => {
server.logger.error("Failed to open admin realm", { error });
});
this.timeout = setTimeout(() => {
delete this.timeout;
this.interval = setInterval(() => this.sendUsage().catch(), 10 * 60 * 1000);
this.sendUsage().catch();
}, 10 * 1000);
}
stop() {
if (this.timeout) {
clearTimeout(this.timeout);
delete this.timeout;
}
if (this.interval) {
clearInterval(this.interval);
delete this.interval;
}
if (this.adminRealm) {
this.adminRealm.close();
delete this.adminRealm;
}
}
sendUsage() {
return __awaiter(this, void 0, void 0, function* () {
try {
const payload = {
active_connections: 0,
active_users: 0,
total_users: this.adminRealm ? this.adminRealm.objects("User").length : 0,
server_version: this.config.serverVersion,
os_type: os.type(),
os_platform: os.platform(),
os_release: os.release()
};
const activeSyncConnectionCounts = yield this.statsStorage.getInstantValues("ros_sync_proxy_active_connections");
if (activeSyncConnectionCounts) {
payload.active_connections = activeSyncConnectionCounts.reduce((sum, stat) => sum + stat.value, 0);
}
const activeUserCounts = yield this.statsStorage.getInstantValues("ros_sync_proxy_active_connections");
if (activeUserCounts) {
payload.active_users = activeUserCounts.length;
}
shared_1.mixpanel.track("ros_usage", payload);
}
catch (_a) {
}
});
}
}
__decorate([
decorators_1.Start(),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Server_1.Server]),
__metadata("design:returntype", void 0)
], MixpanelService.prototype, "start", null);
__decorate([
decorators_1.Stop(),
__metadata("design:type", Function),
__metadata("design:paramtypes", []),
__metadata("design:returntype", void 0)
], MixpanelService.prototype, "stop", null);
exports.MixpanelService = MixpanelService;
//# sourceMappingURL=MixpanelService.js.map