static void getDiagnosticInformation()

in prod/native/libcommon/code/Diagnostics.cpp [55:94]


static void getDiagnosticInformation(std::ostream &out, elasticapm::php::PhpBridgeInterface const &bridge) {
    out << std::setfill(detail::separator) << std::setw(detail::separatorWidth) << detail::separator << std::endl;
    out << "Elastic Distribution for OpenTelemetry PHP diagnostics:" << std::endl;
    out << std::setfill(detail::separator) << std::setw(detail::separatorWidth) << detail::separator << std::endl;
    std::time_t time = std::time({});
    char timeString[std::size("yyyy-mm-ddThh:mm:ssZ")];
    std::strftime(std::data(timeString), std::size(timeString), "%FT%TZ", std::gmtime(&time));

    out << "Time: " << timeString << " UTC (" << std::chrono::milliseconds(time).count() << ')' << std::endl;
    out << "PID: " << getpid() << std::endl;
    out << "PPID: " << getppid() << std::endl;
    out << "UID: " << getuid() << std::endl;

    auto extensions = bridge.getExtensionList();
    if (extensions.size() > 0) {
        out << std::setfill(detail::separator) << std::setw(detail::separatorWidth) << detail::separator << std::endl;
        out << "Loaded extensions:" << std::endl;
        out << std::setfill(detail::separator) << std::setw(detail::separatorWidth) << detail::separator << std::endl;

        for (auto const &extension : extensions) {
            out << extension.name << " " << extension.version << std::endl;
        }
    }

    out << std::setfill(detail::separator) << std::setw(detail::separatorWidth) << detail::separator << std::endl << std::endl;
    out << "phpinfo() output:" << std::endl;
    out << std::setfill(detail::separator) << std::setw(detail::separatorWidth) << detail::separator << std::endl;
    out << bridge.getPhpInfo() << std::endl;

    getProcessDiags(out, "maps");
    getProcessDiags(out, "smaps_rollup");
    getProcessDiags(out, "status");
    getProcessDiags(out, "limits");
    getProcessDiags(out, "cgroup");
    getProcessDiags(out, "cmdline");
    getProcessDiags(out, "mountinfo");
    getProcessDiags(out, "mounts");
    getProcessDiags(out, "mountstats");
    getProcessDiags(out, "stat");
}