X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fserver%2Fserver.ts;h=8b07115f1f810a43c0403f7ef7b75b3702ff64a0;hb=a30a136c9896c656cab98d2c92cde32c534dc098;hp=122e5f74fcd5190bb38494bf387901e4ff37a533;hpb=01de67b9a4fcdf01102ccc3cb7dc24beebf6c7ea;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/server/server.ts b/server/models/server/server.ts index 122e5f74f..8b07115f1 100644 --- a/server/models/server/server.ts +++ b/server/models/server/server.ts @@ -1,9 +1,10 @@ -import * as Sequelize from 'sequelize' -import { AllowNull, Column, CreatedAt, Default, Is, IsInt, Max, Model, Table, UpdatedAt } from 'sequelize-typescript' +import { AllowNull, Column, CreatedAt, Default, HasMany, Is, Model, Table, UpdatedAt } from 'sequelize-typescript' import { isHostValid } from '../../helpers/custom-validators/servers' -import { logger } from '../../helpers/logger' -import { SERVERS_SCORE } from '../../initializers' +import { ActorModel } from '../activitypub/actor' import { throwIfNotValid } from '../utils' +import { ServerBlocklistModel } from './server-blocklist' +import * as Bluebird from 'bluebird' +import { MServer, MServerFormattable } from '@server/typings/models/server' @Table({ tableName: 'server', @@ -11,9 +12,6 @@ import { throwIfNotValid } from '../utils' { fields: [ 'host' ], unique: true - }, - { - fields: [ 'score' ] } ] }) @@ -25,11 +23,9 @@ export class ServerModel extends Model { host: string @AllowNull(false) - @Default(SERVERS_SCORE.BASE) - @IsInt - @Max(SERVERS_SCORE.max) + @Default(false) @Column - score: number + redundancyAllowed: boolean @CreatedAt createdAt: Date @@ -37,73 +33,51 @@ export class ServerModel extends Model { @UpdatedAt updatedAt: Date - static updateServersScoreAndRemoveBadOnes (goodServers: number[], badServers: number[]) { - logger.info('Updating %d good servers and %d bad servers scores.', goodServers.length, badServers.length) + @HasMany(() => ActorModel, { + foreignKey: { + name: 'serverId', + allowNull: true + }, + onDelete: 'CASCADE', + hooks: true + }) + Actors: ActorModel[] + + @HasMany(() => ServerBlocklistModel, { + foreignKey: { + allowNull: false + }, + onDelete: 'CASCADE' + }) + BlockedByAccounts: ServerBlocklistModel[] - if (goodServers.length !== 0) { - ServerModel.incrementScores(goodServers, SERVERS_SCORE.BONUS) - .catch(err => { - logger.error('Cannot increment scores of good servers.', err) - }) + static load (id: number): Bluebird { + const query = { + where: { + id + } } - if (badServers.length !== 0) { - ServerModel.incrementScores(badServers, SERVERS_SCORE.PENALTY) - .then(() => ServerModel.removeBadServers()) - .catch(err => { - if (err) logger.error('Cannot decrement scores of bad servers.', err) - }) - - } + return ServerModel.findOne(query) } - // Remove servers with a score of 0 (too many requests where they were unreachable) - private static async removeBadServers () { - try { - const servers = await ServerModel.listBadServers() - - const serversRemovePromises = servers.map(server => server.destroy()) - await Promise.all(serversRemovePromises) - - const numberOfServersRemoved = servers.length - - if (numberOfServersRemoved) { - logger.info('Removed %d servers.', numberOfServersRemoved) - } else { - logger.info('No need to remove bad servers.') + static loadByHost (host: string): Bluebird { + const query = { + where: { + host } - } catch (err) { - logger.error('Cannot remove bad servers.', err) - } - } - - private static incrementScores (ids: number[], value: number) { - const update = { - score: Sequelize.literal('score +' + value) } - const options = { - where: { - id: { - [Sequelize.Op.in]: ids - } - }, - // In this case score is a literal and not an integer so we do not validate it - validate: false - } + return ServerModel.findOne(query) + } - return ServerModel.update(update, options) + isBlocked () { + return this.BlockedByAccounts && this.BlockedByAccounts.length !== 0 } - private static listBadServers () { - const query = { - where: { - score: { - [Sequelize.Op.lte]: 0 - } - } + toFormattedJSON (this: MServerFormattable) { + return { + host: this.host } - - return ServerModel.findAll(query) } }