Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/autossl/views/view_logs_controller.js

/*
# templates/autossl/views/view_logs_controller.js Copyright(c) 2020 cPanel, L.L.C.
#                                                           All rights reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
*/

/* global define, PAGE */
/* jshint -W100, -W089 */
/* eslint-disable camelcase */

define(
    [
        "lodash",
        "angular",
        "cjt/util/locale",
        "cjt/core",
        "cjt/util/parse",
        "uiBootstrap",
        "cjt/directives/formWaiting",
    ],
    function(_, angular, LOCALE, CJT, CJT_PARSE) {
        "use strict";

        // Retrieve the current application
        var app = angular.module("App");

        // Setup the controller
        var controller = app.controller(
            "view_logs_controller", [
                "$scope",
                "$timeout",
                "manageService",
                "growl",
                "PAGE",
                function($scope, $timeout, manageService, growl, PAGE) {
                    function growlError(result) {
                        return growl.error( _.escape(result.error) );
                    }

                    manageService.groom_logs_catalog(PAGE.logs_catalog);

                    var providerDisplayName = {};
                    PAGE.provider_info.forEach( function(p) {
                        providerDisplayName[p.module_name] = p.display_name;
                    } );

                    // do this while CJT2’s CLDR is broken.
                    var cjt1_LOCALE = window.LOCALE;

                    var log_level_fontawesome = {

                        // warn: "fa-exclamation-triangle",
                        warn: "exclamation-triangle",
                        error: "minus-square",
                        out: "info-circle",
                        success: "check",
                    };

                    var log_level_localized = {
                        success: LOCALE.maketext("SUCCESS"),
                        warn: LOCALE.maketext("WARN"),
                        error: LOCALE.maketext("ERROR"),
                    };

                    var unparsable_template = LOCALE.maketext("Unparsable log data ([_1]):", "__ERR__");

                    angular.extend( $scope, {
                        log_level_localized: log_level_localized,

                        log_level_fontawesome: log_level_fontawesome,

                        logs_catalog: manageService.get_logs_catalog(),
                        chosen_log: manageService.get_logs_catalog()[0],

                        datetime: cjt1_LOCALE.local_datetime.bind(cjt1_LOCALE),

                        get_provider_display_name: manageService.get_provider_display_name,

                        fetch_logs_catalog: function() {
                            return manageService.refresh_logs_catalog().then(
                                function(catalog) {
                                    $scope.logs_catalog = catalog;
                                    var old_chosen_log = $scope.chosen_log;
                                    $scope.chosen_log = null;

                                    if (old_chosen_log) {
                                        for (var c = 0; c < catalog.length; c++) {
                                            if (old_chosen_log.provider !== catalog[c].provider) {
                                                continue;
                                            }
                                            if (old_chosen_log.start_time !== catalog[c].start_time) {
                                                continue;
                                            }

                                            $scope.chosen_log = catalog[c];
                                            break;
                                        }
                                    }

                                    if (!$scope.chosen_log) {
                                        $scope.chosen_log = catalog[0];
                                    }

                                    return;
                                },
                                growlError
                            );
                        },

                        // This optimization is ugly, but AngularJS was too slow
                        // when rendering thousands of DOM nodes.
                        _log_data_to_html: function(logs) {
                            var rows = [];

                            var log_level_html = {};
                            for (var key in log_level_localized) {
                                log_level_html[key] = _.escape(log_level_localized[key]);
                            }

                            var indentTimestamp;

                            for (var l = 0; l < logs.length; l++) {
                                var entry = logs[l];
                                var div_class = "logentry-" + entry.type;
                                if (("" + entry.indent) !== "0") {
                                    div_class += " indent" + entry.indent;
                                }
                                var r_html = "<div class='" + div_class + "'>";
                                if (log_level_fontawesome[entry.type]) {
                                    r_html += " <span class='fas fa-" + log_level_fontawesome[entry.type] + "'></span>";
                                }

                                var curIndentTimestamp = [entry.indent, entry.timestamp_epoch].join();

                                if ((curIndentTimestamp !== indentTimestamp) && entry.timestamp_epoch) {
                                    indentTimestamp = curIndentTimestamp;
                                    r_html += " <span>" + LOCALE.local_datetime(entry.timestamp_epoch, "time_format_medium") + "</span>";
                                }


                                if (log_level_localized[entry.type]) {
                                    r_html += " <span>" + log_level_html[entry.type] + "</span>";
                                }

                                if ("contents" in entry) {
                                    r_html += " " + _.escape(entry.contents);
                                } else {
                                    r_html += " <span class='log-unparsed'>??? " + unparsable_template.replace(/__ERR__/, _.escape(entry.parse_error)) + " " + _.escape(entry.raw) + "</span>";
                                }

                                r_html += "</div>";

                                rows.push(r_html);
                            }

                            return rows.join("");
                        },

                        log_submit: function() {
                            var loadData = Object.create($scope.chosen_log);

                            $scope.log_load_in_progress = true;

                            return manageService.get_log(loadData).then(
                                function(resp) {
                                    $scope.current_loaded_log = resp;
                                    $timeout(
                                        function() {
                                            document.getElementById("current_loaded_log_html").innerHTML = $scope._log_data_to_html(resp);
                                        }
                                    );

                                    loadData.start_time_epoch = $scope.chosen_log.start_time_epoch;
                                    $scope.last_load_data = loadData;
                                },
                                growlError
                            ).then( function() {
                                $scope.log_load_in_progress = false;
                            } );
                        },
                    } );

                    manageService.restore_and_save_scope(
                        "view_logs",
                        $scope,
                        [
                            "chosen_log",
                            "last_load_data",
                            "current_loaded_log",
                        ]
                    );
                }
            ]
        );

        return controller;
    }
);
Back to Directory File Manager