|
|
|
@ -8,6 +8,7 @@ import { PropertyService } from '@ghostfolio/api/services/property/property.serv
|
|
|
|
|
import { TagService } from '@ghostfolio/api/services/tag/tag.service';
|
|
|
|
|
import {
|
|
|
|
|
DEFAULT_CURRENCY,
|
|
|
|
|
DEFAULT_REQUEST_TIMEOUT,
|
|
|
|
|
PROPERTY_BETTER_UPTIME_MONITOR_ID,
|
|
|
|
|
PROPERTY_COUNTRIES_OF_SUBSCRIBERS,
|
|
|
|
|
PROPERTY_DEMO_USER_ID,
|
|
|
|
@ -168,10 +169,18 @@ export class InfoService {
|
|
|
|
|
|
|
|
|
|
private async countDockerHubPulls(): Promise<number> {
|
|
|
|
|
try {
|
|
|
|
|
const abortController = new AbortController();
|
|
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
abortController.abort();
|
|
|
|
|
}, DEFAULT_REQUEST_TIMEOUT);
|
|
|
|
|
|
|
|
|
|
const { pull_count } = await got(
|
|
|
|
|
`https://hub.docker.com/v2/repositories/ghostfolio/ghostfolio`,
|
|
|
|
|
{
|
|
|
|
|
headers: { 'User-Agent': 'request' }
|
|
|
|
|
headers: { 'User-Agent': 'request' },
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
signal: abortController.signal
|
|
|
|
|
}
|
|
|
|
|
).json<any>();
|
|
|
|
|
|
|
|
|
@ -185,7 +194,16 @@ export class InfoService {
|
|
|
|
|
|
|
|
|
|
private async countGitHubContributors(): Promise<number> {
|
|
|
|
|
try {
|
|
|
|
|
const { body } = await got('https://github.com/ghostfolio/ghostfolio');
|
|
|
|
|
const abortController = new AbortController();
|
|
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
abortController.abort();
|
|
|
|
|
}, DEFAULT_REQUEST_TIMEOUT);
|
|
|
|
|
|
|
|
|
|
const { body } = await got('https://github.com/ghostfolio/ghostfolio', {
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
signal: abortController.signal
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const $ = cheerio.load(body);
|
|
|
|
|
|
|
|
|
@ -203,10 +221,18 @@ export class InfoService {
|
|
|
|
|
|
|
|
|
|
private async countGitHubStargazers(): Promise<number> {
|
|
|
|
|
try {
|
|
|
|
|
const abortController = new AbortController();
|
|
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
abortController.abort();
|
|
|
|
|
}, DEFAULT_REQUEST_TIMEOUT);
|
|
|
|
|
|
|
|
|
|
const { stargazers_count } = await got(
|
|
|
|
|
`https://api.github.com/repos/ghostfolio/ghostfolio`,
|
|
|
|
|
{
|
|
|
|
|
headers: { 'User-Agent': 'request' }
|
|
|
|
|
headers: { 'User-Agent': 'request' },
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
signal: abortController.signal
|
|
|
|
|
}
|
|
|
|
|
).json<any>();
|
|
|
|
|
|
|
|
|
@ -323,18 +349,25 @@ export class InfoService {
|
|
|
|
|
PROPERTY_BETTER_UPTIME_MONITOR_ID
|
|
|
|
|
)) as string;
|
|
|
|
|
|
|
|
|
|
const abortController = new AbortController();
|
|
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
abortController.abort();
|
|
|
|
|
}, DEFAULT_REQUEST_TIMEOUT);
|
|
|
|
|
|
|
|
|
|
const { data } = await got(
|
|
|
|
|
`https://uptime.betterstack.com/api/v2/monitors/${monitorId}/sla?from=${format(
|
|
|
|
|
subDays(new Date(), 90),
|
|
|
|
|
DATE_FORMAT
|
|
|
|
|
)}&to${format(new Date(), DATE_FORMAT)}`,
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
headers: {
|
|
|
|
|
Authorization: `Bearer ${this.configurationService.get(
|
|
|
|
|
'BETTER_UPTIME_API_KEY'
|
|
|
|
|
)}`
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
signal: abortController.signal
|
|
|
|
|
}
|
|
|
|
|
).json<any>();
|
|
|
|
|
|
|
|
|
|