X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fserver%2Fserver.ts;h=300d7093808c568b76e3520ef8304fafa7fc7522;hb=6d8c8ea73a774c3568e6d28a4cbebcf7979d5c2a;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..300d70938 100644 --- a/server/models/server/server.ts +++ b/server/models/server/server.ts @@ -1,8 +1,6 @@ -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' @Table({ @@ -11,9 +9,6 @@ import { throwIfNotValid } from '../utils' { fields: [ 'host' ], unique: true - }, - { - fields: [ 'score' ] } ] }) @@ -25,11 +20,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 +30,29 @@ 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) - - if (goodServers.length !== 0) { - ServerModel.incrementScores(goodServers, SERVERS_SCORE.BONUS) - .catch(err => { - logger.error('Cannot increment scores of good servers.', err) - }) - } - - 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) - }) - - } - } - - // 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.') - } - } catch (err) { - logger.error('Cannot remove bad servers.', err) - } - } - - private static incrementScores (ids: number[], value: number) { - const update = { - score: Sequelize.literal('score +' + value) - } + @HasMany(() => ActorModel, { + foreignKey: { + name: 'serverId', + allowNull: true + }, + onDelete: 'CASCADE', + hooks: true + }) + Actors: ActorModel[] - const options = { + static loadByHost (host: string) { + const query = { 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 + host + } } - return ServerModel.update(update, options) + return ServerModel.findOne(query) } - private static listBadServers () { - const query = { - where: { - score: { - [Sequelize.Op.lte]: 0 - } - } + toFormattedJSON () { + return { + host: this.host } - - return ServerModel.findAll(query) } }