diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index b0214c7b75..5f07bc88d1 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -211,6 +211,7 @@ phutil_register_library_map(array( 'ConduitCallTestCase' => 'applications/conduit/call/__tests__/ConduitCallTestCase.php', 'ConduitConnectConduitAPIMethod' => 'applications/conduit/method/ConduitConnectConduitAPIMethod.php', 'ConduitConnectionGarbageCollector' => 'applications/conduit/garbagecollector/ConduitConnectionGarbageCollector.php', + 'ConduitDeprecatedCallSetupCheck' => 'applications/conduit/check/ConduitDeprecatedCallSetupCheck.php', 'ConduitException' => 'applications/conduit/protocol/exception/ConduitException.php', 'ConduitGetCapabilitiesConduitAPIMethod' => 'applications/conduit/method/ConduitGetCapabilitiesConduitAPIMethod.php', 'ConduitGetCertificateConduitAPIMethod' => 'applications/conduit/method/ConduitGetCertificateConduitAPIMethod.php', @@ -3321,6 +3322,7 @@ phutil_register_library_map(array( 'ConduitCallTestCase' => 'PhabricatorTestCase', 'ConduitConnectConduitAPIMethod' => 'ConduitAPIMethod', 'ConduitConnectionGarbageCollector' => 'PhabricatorGarbageCollector', + 'ConduitDeprecatedCallSetupCheck' => 'PhabricatorSetupCheck', 'ConduitException' => 'Exception', 'ConduitGetCapabilitiesConduitAPIMethod' => 'ConduitAPIMethod', 'ConduitGetCertificateConduitAPIMethod' => 'ConduitAPIMethod', diff --git a/src/applications/conduit/check/ConduitDeprecatedCallSetupCheck.php b/src/applications/conduit/check/ConduitDeprecatedCallSetupCheck.php new file mode 100644 index 0000000000..464244d826 --- /dev/null +++ b/src/applications/conduit/check/ConduitDeprecatedCallSetupCheck.php @@ -0,0 +1,64 @@ +setViewer(PhabricatorUser::getOmnipotentUser()) + ->withIsDeprecated(true) + ->execute(); + if (!$methods) { + return; + } + + $method_names = mpull($methods, 'getAPIMethodName'); + + $table = new PhabricatorConduitMethodCallLog(); + $conn_r = $table->establishConnection('r'); + + $calls = queryfx_all( + $conn_r, + 'SELECT DISTINCT method FROM %T WHERE dateCreated > %d + AND method IN (%Ls)', + $table->getTableName(), + time() - (60 * 60 * 24 * 30), + $method_names); + $calls = ipull($calls, 'method', 'method'); + + foreach ($calls as $method_name) { + $method = $methods[$method_name]; + + $summary = pht( + 'Deprecated Conduit method `%s` was called in the last 30 days. '. + 'You should migrate away from use of this method: it will be '. + 'removed in a future version of Phabricator.', + $method_name); + + $uri = PhabricatorEnv::getURI('/conduit/log/?methods='.$method_name); + + $description = $method->getMethodStatusDescription(); + + $message = pht( + 'Deprecated Conduit method %s was called in the last 30 days. '. + 'You should migrate away from use of this method: it will be '. + 'removed in a future version of Phabricator.'. + "\n\n". + "%s: %s". + "\n\n". + 'If you have already migrated all callers away from this method, '. + 'you can safely ignore this setup issue.', + phutil_tag('tt', array(), $method_name), + phutil_tag('tt', array(), $method_name), + $description); + + $this + ->newIssue('conduit.deprecated.'.$method_name) + ->setShortName(pht('Deprecated Conduit Method')) + ->setName(pht('Deprecated Conduit Method "%s" In Use', $method_name)) + ->setSummary($summary) + ->setMessage($message) + ->addLink($uri, pht('View Method Call Logs')); + } + } + +}