Significant update on the reporting script

This commit is contained in:
Pinga 2023-11-13 11:45:37 +02:00
parent ff8701bf03
commit 4d1e6f908e

View file

@ -21,13 +21,49 @@ $query = "SELECT tld FROM domain_tld";
$tlds = $dbh->query($query)->fetchAll(PDO::FETCH_COLUMN);
foreach ($tlds as $tld) {
// Initialize activity and transaction data arrays for each TLD
$activityData = [];
$transactionData = [];
// Construct activity data for each TLD
$activityData[] = [
'operational-registrars' => getOperationalRegistrars($dbh, $tld),
'ramp-up-registrars' => getRampUpRegistrars($dbh, $tld),
'pre-ramp-up-registrars' => getPreRampUpRegistrars($dbh, $tld),
'zfa-passwords' => getZfaPasswords($dbh, $tld),
// ... continue for all other headers
'whois-43-queries' => getWhois43Queries($dbh, $tld),
'web-whois-queries' => getWebWhoisQueries($dbh, $tld),
'searchable-whois-queries' => getSearchableWhoisQueries($dbh, $tld),
'dns-udp-queries-received' => getDnsUdpQueriesReceived($dbh, $tld),
'dns-udp-queries-responded' => getDnsUdpQueriesResponded($dbh, $tld),
'dns-tcp-queries-received' => getDnsTcpQueriesReceived($dbh, $tld),
'dns-tcp-queries-responded' => getDnsTcpQueriesResponded($dbh, $tld),
'srs-dom-check' => getSrsDomCheck($dbh, $tld),
'srs-dom-create' => getSrsDomCreate($dbh, $tld),
'srs-dom-delete' => getSrsDomDelete($dbh, $tld),
'srs-dom-info' => getSrsDomInfo($dbh, $tld),
'srs-dom-renew' => getSrsDomRenew($dbh, $tld),
'srs-dom-rgp-restore-report' => getSrsDomRgpRestoreReport($dbh, $tld),
'srs-dom-rgp-restore-request' => getSrsDomRgpRestoreRequest($dbh, $tld),
'srs-dom-transfer-approve' => getSrsDomTransferApprove($dbh, $tld),
'srs-dom-transfer-cancel' => getSrsDomTransferCancel($dbh, $tld),
'srs-dom-transfer-query' => getSrsDomTransferQuery($dbh, $tld),
'srs-dom-transfer-reject' => getSrsDomTransferReject($dbh, $tld),
'srs-dom-transfer-request' => getSrsDomTransferRequest($dbh, $tld),
'srs-dom-update' => getSrsDomUpdate($dbh, $tld),
'srs-host-check' => getSrsHostCheck($dbh, $tld),
'srs-host-create' => getSrsHostCreate($dbh, $tld),
'srs-host-delete' => getSrsHostDelete($dbh, $tld),
'srs-host-info' => getSrsHostInfo($dbh, $tld),
'srs-host-update' => getSrsHostUpdate($dbh, $tld),
'srs-cont-check' => getSrsContCheck($dbh, $tld),
'srs-cont-create' => getSrsContCreate($dbh, $tld),
'srs-cont-delete' => getSrsContDelete($dbh, $tld),
'srs-cont-info' => getSrsContInfo($dbh, $tld),
'srs-cont-transfer-approve' => getSrsContTransferApprove($dbh, $tld),
'srs-cont-transfer-cancel' => getSrsContTransferCancel($dbh, $tld),
'srs-cont-transfer-query' => getSrsContTransferQuery($dbh, $tld),
'srs-cont-transfer-reject' => getSrsContTransferReject($dbh, $tld),
'srs-cont-transfer-request' => getSrsContTransferRequest($dbh, $tld),
'srs-cont-update' => getSrsContUpdate($dbh, $tld),
];
// Loop through registrars and get transaction data
@ -36,15 +72,94 @@ foreach ($tlds as $tld) {
$transactionData[] = [
'registrar-name' => $registrar['name'],
'iana-id' => $registrar['iana_id'],
'total-domains' => $registrar['total_domains'],
'net-adds-1-yr' => getNetAdds1Yr($dbh, $registrar),
// ... continue for all other headers
'total-domains' => getTotalDomains($dbh, $registrar),
'total-nameservers' => getTotalNameservers($dbh, $registrar),
'net-adds-1-yr' => getNetAddsByYear($dbh, $registrar, 1),
'net-adds-2-yr' => getNetAddsByYear($dbh, $registrar, 2),
'net-adds-3-yr' => getNetAddsByYear($dbh, $registrar, 3),
'net-adds-4-yr' => getNetAddsByYear($dbh, $registrar, 4),
'net-adds-5-yr' => getNetAddsByYear($dbh, $registrar, 5),
'net-adds-6-yr' => getNetAddsByYear($dbh, $registrar, 6),
'net-adds-7-yr' => getNetAddsByYear($dbh, $registrar, 7),
'net-adds-8-yr' => getNetAddsByYear($dbh, $registrar, 8),
'net-adds-9-yr' => getNetAddsByYear($dbh, $registrar, 9),
'net-adds-10-yr' => getNetAddsByYear($dbh, $registrar, 10),
'net-renews-1-yr' => getNetRenewsByYear($dbh, $registrar, 1),
'net-renews-2-yr' => getNetRenewsByYear($dbh, $registrar, 2),
'net-renews-3-yr' => getNetRenewsByYear($dbh, $registrar, 3),
'net-renews-4-yr' => getNetRenewsByYear($dbh, $registrar, 4),
'net-renews-5-yr' => getNetRenewsByYear($dbh, $registrar, 5),
'net-renews-6-yr' => getNetRenewsByYear($dbh, $registrar, 6),
'net-renews-7-yr' => getNetRenewsByYear($dbh, $registrar, 7),
'net-renews-8-yr' => getNetRenewsByYear($dbh, $registrar, 8),
'net-renews-9-yr' => getNetRenewsByYear($dbh, $registrar, 9),
'net-renews-10-yr' => getNetRenewsByYear($dbh, $registrar, 10),
'transfer-gaining-successful' => getTransferGainingSuccessful($dbh, $registrar),
'transfer-gaining-nacked' => getTransferGainingNacked($dbh, $registrar),
'transfer-losing-successful' => getTransferLosingSuccessful($dbh, $registrar),
'transfer-losing-nacked' => getTransferLosingNacked($dbh, $registrar),
'transfer-disputed-won' => getTransferDisputedWon($dbh, $registrar),
'transfer-disputed-lost' => getTransferDisputedLost($dbh, $registrar),
'transfer-disputed-nodecision' => getTransferDisputedNoDecision($dbh, $registrar),
'deleted-domains-grace' => getDeletedDomainsGrace($dbh, $registrar),
'deleted-domains-nograce' => getDeletedDomainsNoGrace($dbh, $registrar),
'restored-domains' => getRestoredDomains($dbh, $registrar),
'restored-noreport' => getRestoredNoReport($dbh, $registrar),
'agp-exemption-requests' => getAgpExemptionRequests($dbh, $registrar),
'agp-exemptions-granted' => getAgpExemptionsGranted($dbh, $registrar),
'agp-exempted-domains' => getAgpExemptedDomains($dbh, $registrar),
'attempted-adds' => getAttemptedAdds($dbh, $registrar),
];
}
$totals = [
'registrar-name' => 'Totals',
'iana-id' => '',
'total-domains' => getTotalDomainsAllRegistrars($dbh),
'total-nameservers' => getTotalNameserversAllRegistrars($dbh),
'net-adds-1-yr' => getNetAddsByYearAllRegistrars($dbh, 1),
'net-adds-2-yr' => getNetAddsByYearAllRegistrars($dbh, 2),
'net-adds-3-yr' => getNetAddsByYearAllRegistrars($dbh, 3),
'net-adds-4-yr' => getNetAddsByYearAllRegistrars($dbh, 4),
'net-adds-5-yr' => getNetAddsByYearAllRegistrars($dbh, 5),
'net-adds-6-yr' => getNetAddsByYearAllRegistrars($dbh, 6),
'net-adds-7-yr' => getNetAddsByYearAllRegistrars($dbh, 7),
'net-adds-8-yr' => getNetAddsByYearAllRegistrars($dbh, 8),
'net-adds-9-yr' => getNetAddsByYearAllRegistrars($dbh, 9),
'net-adds-10-yr' => getNetAddsByYearAllRegistrars($dbh, 10),
'net-renews-1-yr' => getNetRenewsByYearAllRegistrars($dbh, 1),
'net-renews-2-yr' => getNetRenewsByYearAllRegistrars($dbh, 2),
'net-renews-3-yr' => getNetRenewsByYearAllRegistrars($dbh, 3),
'net-renews-4-yr' => getNetRenewsByYearAllRegistrars($dbh, 4),
'net-renews-5-yr' => getNetRenewsByYearAllRegistrars($dbh, 5),
'net-renews-6-yr' => getNetRenewsByYearAllRegistrars($dbh, 6),
'net-renews-7-yr' => getNetRenewsByYearAllRegistrars($dbh, 7),
'net-renews-8-yr' => getNetRenewsByYearAllRegistrars($dbh, 8),
'net-renews-9-yr' => getNetRenewsByYearAllRegistrars($dbh, 9),
'net-renews-10-yr' => getNetRenewsByYearAllRegistrars($dbh, 10),
'transfer-gaining-successful' => getTransferGainingSuccessfulAllRegistrars($dbh),
'transfer-gaining-nacked' => getTransferGainingNackedAllRegistrars($dbh),
'transfer-losing-successful' => getTransferLosingSuccessfulAllRegistrars($dbh),
'transfer-losing-nacked' => getTransferLosingNackedAllRegistrars($dbh),
'transfer-disputed-won' => getTransferDisputedWonAllRegistrars($dbh),
'transfer-disputed-lost' => getTransferDisputedLostAllRegistrars($dbh),
'transfer-disputed-nodecision' => getTransferDisputedNoDecisionAllRegistrars($dbh),
'deleted-domains-grace' => getDeletedDomainsGraceAllRegistrars($dbh),
'deleted-domains-nograce' => getDeletedDomainsNoGraceAllRegistrars($dbh),
'restored-domains' => getRestoredDomainsAllRegistrars($dbh),
'restored-noreport' => getRestoredNoReportAllRegistrars($dbh),
'agp-exemption-requests' => getAgpExemptionRequestsAllRegistrars($dbh),
'agp-exemptions-granted' => getAgpExemptionsGrantedAllRegistrars($dbh),
'agp-exempted-domains' => getAgpExemptedDomainsAllRegistrars($dbh),
'attempted-adds' => getAttemptedAddsAllRegistrars($dbh),
];
$transactionData[] = $totals;
// Write data to CSV
writeCSV("{$tld}-activity-" . date('Ym') . "-en.csv", $activityData);
writeCSV("{$tld}-transactions-" . date('Ym') . "-en.csv", $transactionData);
$tld_save = strtolower(ltrim($tld, '.'));
writeCSV("/tmp/{$tld_save}-activity-" . date('Ym') . "-en.csv", $activityData);
writeCSV("/tmp/{$tld_save}-transactions-" . date('Ym') . "-en.csv", $transactionData);
// Upload if the $c['reporting_upload'] variable is true
if ($c['reporting_upload']) {
@ -52,29 +167,29 @@ foreach ($tlds as $tld) {
$previousMonth = date('Ym', strtotime('-1 month'));
// Paths to the files you created
$activityFile = "{$tld}-activity-" . $previousMonth . "-en.csv";
$transactionFile = "{$tld}-transactions-" . $previousMonth . "-en.csv";
$activityFile = "{$tld_save}-activity-" . $previousMonth . "-en.csv";
$transactionFile = "{$tld_save}-transactions-" . $previousMonth . "-en.csv";
// URLs for upload
$activityUploadUrl = 'https://ry-api.icann.org/report/registry-functions-activity/' . $tld . '/' . $previousMonth;
$transactionUploadUrl = 'https://ry-api.icann.org/report/registrar-transactions/' . $tld . '/' . $previousMonth;
$activityUploadUrl = 'https://ry-api.icann.org/report/registry-functions-activity/' . $tld_save . '/' . $previousMonth;
$transactionUploadUrl = 'https://ry-api.icann.org/report/registrar-transactions/' . $tld_save . '/' . $previousMonth;
// Perform the upload
uploadFile($activityUploadUrl, $activityFile, $c['reporting_username'], $c['reporting_password']);
uploadFile($transactionUploadUrl, $transactionFile, $c['reporting_username'], $c['reporting_password']);
//uploadFile($activityUploadUrl, $activityFile, $c['reporting_username'], $c['reporting_password']);
//uploadFile($transactionUploadUrl, $transactionFile, $c['reporting_username'], $c['reporting_password']);
}
}
// HELPER FUNCTIONS
function getOperationalRegistrars($dbh, $tld) {
$stmt = $dbh->prepare("SELECT COUNT(*) FROM registrars WHERE status = 'operational' AND tld = ?");
$stmt->execute([$tld]);
function getOperationalRegistrars($dbh) {
$stmt = $dbh->prepare("SELECT COUNT(id) FROM registrar");
$stmt->execute();
return $stmt->fetchColumn();
}
function getRegistrars($dbh) {
return $dbh->query("SELECT name, iana_id, total_domains FROM registrars")->fetchAll();
return $dbh->query("SELECT id, name, iana_id FROM registrar")->fetchAll();
}
function writeCSV($filename, $data) {
@ -86,23 +201,389 @@ function writeCSV($filename, $data) {
fclose($file);
}
function getRampUpRegistrars($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getPreRampUpRegistrars($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getZfaPasswords($dbh, $tld) {
return 'CZDS';
}
function getWhois43Queries($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
// Sample transaction data helper functions:
function getNetAdds1Yr($dbh, $registrar) {
function getWebWhoisQueries($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSearchableWhoisQueries($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getDnsUdpQueriesReceived($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getDnsUdpQueriesResponded($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getDnsTcpQueriesReceived($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getDnsTcpQueriesResponded($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsDomCheck($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsDomCreate($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsDomDelete($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsDomInfo($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsDomRenew($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsDomRgpRestoreReport($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsDomRgpRestoreRequest($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsDomTransferApprove($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsDomTransferCancel($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsDomTransferQuery($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsDomTransferReject($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsDomTransferRequest($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsDomUpdate($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsHostCheck($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsHostCreate($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsHostDelete($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsHostInfo($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsHostUpdate($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsContCheck($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsContCreate($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsContDelete($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsContInfo($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsContTransferApprove($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsContTransferCancel($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsContTransferQuery($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsContTransferReject($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsContTransferRequest($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getSrsContUpdate($dbh, $tld) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getTotalDomains($dbh, $registrar) {
$stmt = $dbh->prepare("SELECT COUNT(name) FROM domain WHERE clid = ?");
$stmt->execute([$registrar['id']]);
return $stmt->fetchColumn();
}
function getTotalNameservers($dbh, $registrar) {
$stmt = $dbh->prepare("SELECT COUNT(name) FROM host WHERE clid = ?");
$stmt->execute([$registrar['id']]);
return $stmt->fetchColumn();
}
function getNetAddsByYear($dbh, $registrar, $years) {
$months = $years * 12;
$stmt = $dbh->prepare("SELECT count(name) FROM domain WHERE clid = :registrarId AND (crdate BETWEEN last_day(curdate() - interval 2 month) + interval 1 day AND last_day(curdate() - interval 1 month)) AND addPeriod = :months");
$stmt->bindParam(':months', $months, PDO::PARAM_INT);
$stmt->bindParam(':registrarId', $registrar['id'], PDO::PARAM_STR);
$stmt->execute();
return $stmt->fetchColumn();
}
function getNetRenewsByYear($dbh, $registrar, $years) {
$months = $years * 12;
$stmt = $dbh->prepare("SELECT count(name) FROM domain WHERE clid= :registrarId AND (renewedDate BETWEEN last_day(curdate() - interval 2 month) + interval 1 day AND last_day(curdate() - interval 1 month)) AND renewPeriod = :months");
$stmt->bindParam(':months', $months, PDO::PARAM_INT);
$stmt->bindParam(':registrarId', $registrar['id'], PDO::PARAM_STR);
$stmt->execute();
return $stmt->fetchColumn();
}
function getTransferGainingSuccessful($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getTransferGainingNacked($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getTransferLosingSuccessful($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getTransferLosingNacked($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getTransferDisputedWon($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getTransferDisputedLost($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getTransferDisputedNoDecision($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getDeletedDomainsGrace($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getDeletedDomainsNoGrace($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getRestoredDomains($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getRestoredNoReport($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getAgpExemptionRequests($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getAgpExemptionsGranted($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getAgpExemptedDomains($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getAttemptedAdds($dbh, $registrar) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getTotalDomainsAllRegistrars($dbh) {
$stmt = $dbh->prepare("SELECT COUNT(name) FROM domain;");
$stmt->execute();
return $stmt->fetchColumn();
}
function getTotalNameserversAllRegistrars($dbh) {
$stmt = $dbh->prepare("SELECT COUNT(name) FROM host;");
$stmt->execute();
return $stmt->fetchColumn();
}
function getNetAddsByYearAllRegistrars($dbh, $years) {
$months = $years * 12;
$stmt = $dbh->prepare("SELECT count(name) FROM domain WHERE (crdate BETWEEN last_day(curdate() - interval 2 month) + interval 1 day AND last_day(curdate() - interval 1 month)) AND addPeriod = :months");
$stmt->bindParam(':months', $months, PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetchColumn();
}
function getNetRenewsByYearAllRegistrars($dbh, $years) {
$months = $years * 12;
$stmt = $dbh->prepare("SELECT count(name) FROM domain WHERE (renewedDate BETWEEN last_day(curdate() - interval 2 month) + interval 1 day AND last_day(curdate() - interval 1 month)) AND renewPeriod = :months");
$stmt->bindParam(':months', $months, PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetchColumn();
}
function getTransferGainingSuccessfulAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getTransferGainingNackedAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getTransferLosingSuccessfulAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getTransferLosingNackedAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getTransferDisputedWonAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getTransferDisputedLostAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getTransferDisputedNoDecisionAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getDeletedDomainsGraceAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getDeletedDomainsNoGraceAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getRestoredDomainsAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getRestoredNoReportAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getAgpExemptionRequestsAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getAgpExemptionsGrantedAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getAgpExemptedDomainsAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}
function getAttemptedAddsAllRegistrars($dbh) {
// Placeholder: Replace with actual query/logic
return 0;
}