storj/web/multinode/src/nodes/index.ts
crawter 9820145e14 web/mnd: nodes domain, api and store
Change-Id: I022c5153dfc85a25eebce6e8ba91b97e906736cb
2021-01-26 17:25:57 +00:00

63 lines
1.5 KiB
TypeScript

// Copyright (C) 2020 Storj Labs, Inc.
// See LICENSE for copying information.
/**
* Describes node online statuses.
*/
export enum NodeStatus {
Online = 'online',
Offline = 'offline',
}
/**
* NodeInfo contains basic node internal state.
*/
export class Node {
public status: NodeStatus = NodeStatus.Offline;
private readonly STATUS_TRESHHOLD_MILISECONDS: number = 10.8e6;
public constructor(
public id: string,
public name: string,
public version: string,
public lastContact: Date,
public diskSpaceUsed: number,
public diskSpaceLeft: number,
public bandwidthUsed: number,
public onlineScore: number,
public auditScore: number,
public suspensionScore: number,
public earned: number,
) {
const now = new Date();
if (now.getTime() - this.lastContact.getTime() < this.STATUS_TRESHHOLD_MILISECONDS) {
this.status = NodeStatus.Online;
}
}
public get displayedName(): string {
return this.name || this.id;
}
}
/**
* CreateNodeFields is a representation of storagenode, that SNO could add to the Multinode Dashboard.
*/
export class CreateNodeFields {
public constructor(
public id: string = '',
public apiSecret: string = '',
public publicAddress: string = '',
) {}
}
/**
* NodeURL defines a structure for connecting to a node.
*/
export class NodeURL {
public constructor(
public id: string,
public address: string,
) {}
}