drop lastCommunicatedAt of instance
This commit is contained in:
parent
7093573f0c
commit
c8bd139713
15 changed files with 19 additions and 27 deletions
|
@ -0,0 +1,11 @@
|
||||||
|
export class removeLastCommunicatedAt1672704017999 {
|
||||||
|
name = 'removeLastCommunicatedAt1672704017999'
|
||||||
|
|
||||||
|
async up(queryRunner) {
|
||||||
|
await queryRunner.query(`ALTER TABLE "instance" DROP COLUMN "lastCommunicatedAt"`);
|
||||||
|
}
|
||||||
|
|
||||||
|
async down(queryRunner) {
|
||||||
|
await queryRunner.query(`ALTER TABLE "instance" ADD "lastCommunicatedAt" TIMESTAMP WITH TIME ZONE NOT NULL`);
|
||||||
|
}
|
||||||
|
}
|
|
@ -35,7 +35,6 @@ export class FederatedInstanceService {
|
||||||
id: this.idService.genId(),
|
id: this.idService.genId(),
|
||||||
host,
|
host,
|
||||||
caughtAt: new Date(),
|
caughtAt: new Date(),
|
||||||
lastCommunicatedAt: new Date(),
|
|
||||||
}).then(x => this.instancesRepository.findOneByOrFail(x.identifiers[0]));
|
}).then(x => this.instancesRepository.findOneByOrFail(x.identifiers[0]));
|
||||||
|
|
||||||
this.cache.set(host, i);
|
this.cache.set(host, i);
|
||||||
|
|
|
@ -86,7 +86,7 @@ export default class FederationChart extends Chart<typeof schema> {
|
||||||
.where(`instance.host IN (${ subInstancesQuery.getQuery() })`)
|
.where(`instance.host IN (${ subInstancesQuery.getQuery() })`)
|
||||||
.andWhere(meta.blockedHosts.length === 0 ? '1=1' : 'instance.host NOT IN (:...blocked)', { blocked: meta.blockedHosts })
|
.andWhere(meta.blockedHosts.length === 0 ? '1=1' : 'instance.host NOT IN (:...blocked)', { blocked: meta.blockedHosts })
|
||||||
.andWhere('instance.isSuspended = false')
|
.andWhere('instance.isSuspended = false')
|
||||||
.andWhere('instance.lastCommunicatedAt > :gt', { gt: new Date(Date.now() - (1000 * 60 * 60 * 24 * 30)) })
|
.andWhere('instance.isNotResponding = false')
|
||||||
.getRawOne()
|
.getRawOne()
|
||||||
.then(x => parseInt(x.count, 10)),
|
.then(x => parseInt(x.count, 10)),
|
||||||
this.instancesRepository.createQueryBuilder('instance')
|
this.instancesRepository.createQueryBuilder('instance')
|
||||||
|
@ -94,7 +94,7 @@ export default class FederationChart extends Chart<typeof schema> {
|
||||||
.where(`instance.host IN (${ pubInstancesQuery.getQuery() })`)
|
.where(`instance.host IN (${ pubInstancesQuery.getQuery() })`)
|
||||||
.andWhere(meta.blockedHosts.length === 0 ? '1=1' : 'instance.host NOT IN (:...blocked)', { blocked: meta.blockedHosts })
|
.andWhere(meta.blockedHosts.length === 0 ? '1=1' : 'instance.host NOT IN (:...blocked)', { blocked: meta.blockedHosts })
|
||||||
.andWhere('instance.isSuspended = false')
|
.andWhere('instance.isSuspended = false')
|
||||||
.andWhere('instance.lastCommunicatedAt > :gt', { gt: new Date(Date.now() - (1000 * 60 * 60 * 24 * 30)) })
|
.andWhere('instance.isNotResponding = false')
|
||||||
.getRawOne()
|
.getRawOne()
|
||||||
.then(x => parseInt(x.count, 10)),
|
.then(x => parseInt(x.count, 10)),
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -33,7 +33,6 @@ export class InstanceEntityService {
|
||||||
notesCount: instance.notesCount,
|
notesCount: instance.notesCount,
|
||||||
followingCount: instance.followingCount,
|
followingCount: instance.followingCount,
|
||||||
followersCount: instance.followersCount,
|
followersCount: instance.followersCount,
|
||||||
lastCommunicatedAt: instance.lastCommunicatedAt.toISOString(),
|
|
||||||
isNotResponding: instance.isNotResponding,
|
isNotResponding: instance.isNotResponding,
|
||||||
isSuspended: instance.isSuspended,
|
isSuspended: instance.isSuspended,
|
||||||
isBlocked: meta.blockedHosts.includes(instance.host),
|
isBlocked: meta.blockedHosts.includes(instance.host),
|
||||||
|
|
|
@ -75,12 +75,6 @@ export class Instance {
|
||||||
})
|
})
|
||||||
public latestRequestReceivedAt: Date | null;
|
public latestRequestReceivedAt: Date | null;
|
||||||
|
|
||||||
/**
|
|
||||||
* このインスタンスと最後にやり取りした日時
|
|
||||||
*/
|
|
||||||
@Column('timestamp with time zone')
|
|
||||||
public lastCommunicatedAt: Date;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* このインスタンスと不通かどうか
|
* このインスタンスと不通かどうか
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -32,11 +32,6 @@ export const packedFederationInstanceSchema = {
|
||||||
type: 'number',
|
type: 'number',
|
||||||
optional: false, nullable: false,
|
optional: false, nullable: false,
|
||||||
},
|
},
|
||||||
lastCommunicatedAt: {
|
|
||||||
type: 'string',
|
|
||||||
optional: false, nullable: false,
|
|
||||||
format: 'date-time',
|
|
||||||
},
|
|
||||||
isNotResponding: {
|
isNotResponding: {
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
optional: false, nullable: false,
|
optional: false, nullable: false,
|
||||||
|
|
|
@ -86,7 +86,6 @@ export class DeliverProcessorService {
|
||||||
this.federatedInstanceService.registerOrFetchInstanceDoc(host).then(i => {
|
this.federatedInstanceService.registerOrFetchInstanceDoc(host).then(i => {
|
||||||
this.instancesRepository.update(i.id, {
|
this.instancesRepository.update(i.id, {
|
||||||
latestStatus: 200,
|
latestStatus: 200,
|
||||||
lastCommunicatedAt: new Date(),
|
|
||||||
isNotResponding: false,
|
isNotResponding: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -179,7 +179,6 @@ export class InboxProcessorService {
|
||||||
this.federatedInstanceService.registerOrFetchInstanceDoc(authUser.user.host).then(i => {
|
this.federatedInstanceService.registerOrFetchInstanceDoc(authUser.user.host).then(i => {
|
||||||
this.instancesRepository.update(i.id, {
|
this.instancesRepository.update(i.id, {
|
||||||
latestRequestReceivedAt: new Date(),
|
latestRequestReceivedAt: new Date(),
|
||||||
lastCommunicatedAt: new Date(),
|
|
||||||
isNotResponding: false,
|
isNotResponding: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -64,8 +64,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
|
||||||
case '-followers': query.orderBy('instance.followersCount', 'ASC'); break;
|
case '-followers': query.orderBy('instance.followersCount', 'ASC'); break;
|
||||||
case '+caughtAt': query.orderBy('instance.caughtAt', 'DESC'); break;
|
case '+caughtAt': query.orderBy('instance.caughtAt', 'DESC'); break;
|
||||||
case '-caughtAt': query.orderBy('instance.caughtAt', 'ASC'); break;
|
case '-caughtAt': query.orderBy('instance.caughtAt', 'ASC'); break;
|
||||||
case '+lastCommunicatedAt': query.orderBy('instance.lastCommunicatedAt', 'DESC'); break;
|
|
||||||
case '-lastCommunicatedAt': query.orderBy('instance.lastCommunicatedAt', 'ASC'); break;
|
|
||||||
|
|
||||||
default: query.orderBy('instance.id', 'DESC'); break;
|
default: query.orderBy('instance.id', 'DESC'); break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,15 +30,13 @@
|
||||||
<option value="-followers">{{ i18n.ts.followers }} ({{ i18n.ts.ascendingOrder }})</option>
|
<option value="-followers">{{ i18n.ts.followers }} ({{ i18n.ts.ascendingOrder }})</option>
|
||||||
<option value="+caughtAt">{{ i18n.ts.registeredAt }} ({{ i18n.ts.descendingOrder }})</option>
|
<option value="+caughtAt">{{ i18n.ts.registeredAt }} ({{ i18n.ts.descendingOrder }})</option>
|
||||||
<option value="-caughtAt">{{ i18n.ts.registeredAt }} ({{ i18n.ts.ascendingOrder }})</option>
|
<option value="-caughtAt">{{ i18n.ts.registeredAt }} ({{ i18n.ts.ascendingOrder }})</option>
|
||||||
<option value="+lastCommunicatedAt">{{ i18n.ts.lastCommunication }} ({{ i18n.ts.descendingOrder }})</option>
|
|
||||||
<option value="-lastCommunicatedAt">{{ i18n.ts.lastCommunication }} ({{ i18n.ts.ascendingOrder }})</option>
|
|
||||||
</MkSelect>
|
</MkSelect>
|
||||||
</FormSplit>
|
</FormSplit>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<MkPagination v-slot="{items}" ref="instances" :key="host + state" :pagination="pagination">
|
<MkPagination v-slot="{items}" ref="instances" :key="host + state" :pagination="pagination">
|
||||||
<div class="dqokceoi">
|
<div class="dqokceoi">
|
||||||
<MkA v-for="instance in items" :key="instance.id" v-tooltip.mfm="`Last communicated: ${dateString(instance.lastCommunicatedAt)}\nStatus: ${getStatus(instance)}`" class="instance" :to="`/instance-info/${instance.host}`">
|
<MkA v-for="instance in items" :key="instance.id" v-tooltip.mfm="`Status: ${getStatus(instance)}`" class="instance" :to="`/instance-info/${instance.host}`">
|
||||||
<MkInstanceCardMini :instance="instance"/>
|
<MkInstanceCardMini :instance="instance"/>
|
||||||
</MkA>
|
</MkA>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -22,7 +22,7 @@ const fetching = ref(true);
|
||||||
|
|
||||||
const fetch = async () => {
|
const fetch = async () => {
|
||||||
const fetchedInstances = await os.api('federation/instances', {
|
const fetchedInstances = await os.api('federation/instances', {
|
||||||
sort: '+lastCommunicatedAt',
|
sort: '+latestRequestReceivedAt',
|
||||||
limit: 6,
|
limit: 6,
|
||||||
});
|
});
|
||||||
instances.value = fetchedInstances;
|
instances.value = fetchedInstances;
|
||||||
|
|
|
@ -153,7 +153,7 @@ onMounted(async () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
os.api('federation/instances', {
|
os.api('federation/instances', {
|
||||||
sort: '+lastCommunicatedAt',
|
sort: '+latestRequestReceivedAt',
|
||||||
limit: 25,
|
limit: 25,
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
activeInstances = res;
|
activeInstances = res;
|
||||||
|
|
|
@ -44,7 +44,7 @@ let key = $ref(0);
|
||||||
|
|
||||||
const tick = () => {
|
const tick = () => {
|
||||||
os.api('federation/instances', {
|
os.api('federation/instances', {
|
||||||
sort: '+lastCommunicatedAt',
|
sort: '+latestRequestReceivedAt',
|
||||||
limit: 30,
|
limit: 30,
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
instances.value = res;
|
instances.value = res;
|
||||||
|
|
|
@ -58,7 +58,7 @@ const fetching = ref(true);
|
||||||
|
|
||||||
const fetch = async () => {
|
const fetch = async () => {
|
||||||
const fetchedInstances = await os.api('federation/instances', {
|
const fetchedInstances = await os.api('federation/instances', {
|
||||||
sort: '+lastCommunicatedAt',
|
sort: '+latestRequestReceivedAt',
|
||||||
limit: 5,
|
limit: 5,
|
||||||
});
|
});
|
||||||
const fetchedCharts = await Promise.all(fetchedInstances.map(i => os.apiGet('charts/instance', { host: i.host, limit: 16, span: 'hour' })));
|
const fetchedCharts = await Promise.all(fetchedInstances.map(i => os.apiGet('charts/instance', { host: i.host, limit: 16, span: 'hour' })));
|
||||||
|
|
|
@ -54,7 +54,7 @@ function onInstanceClick(i) {
|
||||||
|
|
||||||
useInterval(() => {
|
useInterval(() => {
|
||||||
os.api('federation/instances', {
|
os.api('federation/instances', {
|
||||||
sort: '+lastCommunicatedAt',
|
sort: '+latestRequestReceivedAt',
|
||||||
limit: 25,
|
limit: 25,
|
||||||
}).then(res => {
|
}).then(res => {
|
||||||
activeInstances = res;
|
activeInstances = res;
|
||||||
|
|
Loading…
Reference in a new issue