Merge pull request #3132 from appwrite/fix-upgrade-stats-table
make stats table value field Bigint
This commit is contained in:
commit
a95995f0e8
2 changed files with 45 additions and 7 deletions
|
@ -2425,7 +2425,7 @@ $collections = [
|
||||||
'$id' => 'value',
|
'$id' => 'value',
|
||||||
'type' => Database::VAR_INTEGER,
|
'type' => Database::VAR_INTEGER,
|
||||||
'format' => '',
|
'format' => '',
|
||||||
'size' => 0,
|
'size' => 8,
|
||||||
'signed' => false,
|
'signed' => false,
|
||||||
'required' => true,
|
'required' => true,
|
||||||
'default' => null,
|
'default' => null,
|
||||||
|
|
|
@ -418,7 +418,7 @@ $cli
|
||||||
|
|
||||||
// Get total storage
|
// Get total storage
|
||||||
$dbForProject->setNamespace('_' . $projectId);
|
$dbForProject->setNamespace('_' . $projectId);
|
||||||
$storageTotal = $dbForProject->sum('deployments', 'size');
|
$deploymentsTotal = $dbForProject->sum('deployments', 'size');
|
||||||
|
|
||||||
$time = (int) (floor(time() / 1800) * 1800); // Time rounded to nearest 30 minutes
|
$time = (int) (floor(time() / 1800) * 1800); // Time rounded to nearest 30 minutes
|
||||||
$id = \md5($time . '_30m_storage.deployments.total'); //Construct unique id for each metric using time, period and metric
|
$id = \md5($time . '_30m_storage.deployments.total'); //Construct unique id for each metric using time, period and metric
|
||||||
|
@ -431,14 +431,14 @@ $cli
|
||||||
'period' => '30m',
|
'period' => '30m',
|
||||||
'time' => $time,
|
'time' => $time,
|
||||||
'metric' => 'storage.deployments.total',
|
'metric' => 'storage.deployments.total',
|
||||||
'value' => $storageTotal,
|
'value' => $deploymentsTotal,
|
||||||
'type' => 1,
|
'type' => 1,
|
||||||
]));
|
]));
|
||||||
} else {
|
} else {
|
||||||
$dbForProject->updateDocument(
|
$dbForProject->updateDocument(
|
||||||
'stats',
|
'stats',
|
||||||
$document->getId(),
|
$document->getId(),
|
||||||
$document->setAttribute('value', $storageTotal)
|
$document->setAttribute('value', $deploymentsTotal)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
$time = (int) (floor(time() / 86400) * 86400); // Time rounded to nearest day
|
$time = (int) (floor(time() / 86400) * 86400); // Time rounded to nearest day
|
||||||
|
@ -450,14 +450,14 @@ $cli
|
||||||
'period' => '1d',
|
'period' => '1d',
|
||||||
'time' => $time,
|
'time' => $time,
|
||||||
'metric' => 'storage.deployments.total',
|
'metric' => 'storage.deployments.total',
|
||||||
'value' => $storageTotal,
|
'value' => $deploymentsTotal,
|
||||||
'type' => 1,
|
'type' => 1,
|
||||||
]));
|
]));
|
||||||
} else {
|
} else {
|
||||||
$dbForProject->updateDocument(
|
$dbForProject->updateDocument(
|
||||||
'stats',
|
'stats',
|
||||||
$document->getId(),
|
$document->getId(),
|
||||||
$document->setAttribute('value', $storageTotal)
|
$document->setAttribute('value', $deploymentsTotal)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} catch(\Exception $e) {
|
} catch(\Exception $e) {
|
||||||
|
@ -714,7 +714,7 @@ $cli
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inserting project level sums for sub collections like storage.total
|
* Inserting project level sums for sub collections like storage.files.total
|
||||||
*/
|
*/
|
||||||
foreach ($subCollectionTotals as $subCollection => $count) {
|
foreach ($subCollectionTotals as $subCollection => $count) {
|
||||||
$dbForProject->setNamespace("_{$projectId}");
|
$dbForProject->setNamespace("_{$projectId}");
|
||||||
|
@ -754,6 +754,44 @@ $cli
|
||||||
$dbForProject->updateDocument('stats', $document->getId(),
|
$dbForProject->updateDocument('stats', $document->getId(),
|
||||||
$document->setAttribute('value', $count));
|
$document->setAttribute('value', $count));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// aggregate storage.total = storage.files.total + storage.deployments.total
|
||||||
|
if($metricPrefix === 'storage' && $subCollection === 'files') {
|
||||||
|
$metric = 'storage.total';
|
||||||
|
$time = (int) (floor(time() / 1800) * 1800); // Time rounded to nearest 30 minutes
|
||||||
|
$id = \md5($time . '_30m_' . $metric); //Construct unique id for each metric using time, period and metric
|
||||||
|
$document = $dbForProject->getDocument('stats', $id);
|
||||||
|
if ($document->isEmpty()) {
|
||||||
|
$dbForProject->createDocument('stats', new Document([
|
||||||
|
'$id' => $id,
|
||||||
|
'time' => $time,
|
||||||
|
'period' => '30m',
|
||||||
|
'metric' => $metric,
|
||||||
|
'value' => $count + $deploymentsTotal,
|
||||||
|
'type' => 1,
|
||||||
|
]));
|
||||||
|
} else {
|
||||||
|
$dbForProject->updateDocument('stats', $document->getId(),
|
||||||
|
$document->setAttribute('value', $count + $deploymentsTotal));
|
||||||
|
}
|
||||||
|
|
||||||
|
$time = (int) (floor(time() / 86400) * 86400); // Time rounded to nearest day
|
||||||
|
$id = \md5($time . '_1d_' . $metric); //Construct unique id for each metric using time, period and metric
|
||||||
|
$document = $dbForProject->getDocument('stats', $id);
|
||||||
|
if ($document->isEmpty()) {
|
||||||
|
$dbForProject->createDocument('stats', new Document([
|
||||||
|
'$id' => $id,
|
||||||
|
'time' => $time,
|
||||||
|
'period' => '1d',
|
||||||
|
'metric' => $metric,
|
||||||
|
'value' => $count + $deploymentsTotal,
|
||||||
|
'type' => 1,
|
||||||
|
]));
|
||||||
|
} else {
|
||||||
|
$dbForProject->updateDocument('stats', $document->getId(),
|
||||||
|
$document->setAttribute('value', $count + $deploymentsTotal));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (\Exception$e) {
|
} catch (\Exception$e) {
|
||||||
Console::warning("Failed to save database counters data for project {$collection}: {$e->getMessage()}");
|
Console::warning("Failed to save database counters data for project {$collection}: {$e->getMessage()}");
|
||||||
|
|
Loading…
Reference in a new issue