~cprov/uci-engine/tarmac-multienv

« back to all changes in this revision

Viewing changes to webui/tickets/static/tickets/webui.js

  • Committer: Evan Dandrea
  • Date: 2014-06-30 12:07:54 UTC
  • mfrom: (630 uci-engine)
  • mto: This revision was merged to the branch mainline in revision 655.
  • Revision ID: evan.dandrea@canonical.com-20140630120754-z6x5eqdahpp2qfrt
Merge with trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
"use strict";
2
2
 
3
3
// Make jslint happy
4
 
var window;
5
4
var YUI;
6
5
 
7
6
YUI.add('webui', function (Y) {
8
 
    var json_error_msg = "The ticket system returned data that could not be understood. " +
9
 
                         "Please try refreshing, or contact support if this problem persists.",
10
 
        refresh_msg = "Refreshing data...";
11
 
    var default_refresh = 15;
12
 
    var static_prefix = "/static/common/";
 
7
    var json_error_msg = (
 
8
        "The ticket system returned data that could not be understood. " +
 
9
        "Please try refreshing, or contact support if this problem " +
 
10
        "persists."),
 
11
        refresh_msg = "Refreshing data...",
 
12
        default_refresh = 60,
 
13
        static_prefix = "/static/common/";
13
14
    Y.webui = {
14
15
        url_prefix: "/api/v1/",
15
 
        refresh_interval: (parseInt(Y.one('#refresh_rate'), 10) || default_refresh) * 1000,
 
16
        refresh_interval: default_refresh * 1000,
 
17
        refresh_timer: null,
16
18
        done_loading: false,
17
 
        log_prefixes: Y.Array(['package_build', 'image_build', 'image_test', 'package_publish']),
 
19
        log_prefixes: Y.Array(
 
20
            ['package_build', 'image_build', 'image_test',
 
21
             'package_publish']),
18
22
        log_step_map: {
19
23
            "Image building": "image_build",
20
24
            "Image testing": "image_test",
45
49
 
46
50
            Y.webui.logs[key].push(log_data);
47
51
        },
48
 
        add_refresh_div: function (callback) {
49
 
            var refresh,
50
 
                refresh_rate,
51
 
                refresh_enabled,
52
 
                onChange;
53
 
 
54
 
            refresh = Y.Node.create('<div id="refresh"></div>');
55
 
 
56
 
            refresh.setHTML('<small>Automatically refresh <input type="checkbox" checked="true"' +
57
 
                'id="refresh_enabled"></input> every <input type="text"' +
58
 
                'id="refresh_rate" value="' + default_refresh + '" maxlength="3" size="2"/> seconds.</small>'
59
 
                );
60
 
 
61
 
            Y.one('div#main-content').append(refresh);
62
 
 
63
 
            Y.webui.refresh_timeout = null;
64
 
            refresh_rate = Y.one("#refresh_rate");
65
 
            refresh_enabled = Y.one("#refresh_enabled");
66
 
            Y.webui.refresh_enabled = refresh_enabled.get('checked');
67
 
 
68
 
            onChange = function () {
69
 
                var value = refresh_rate.get('value'),
70
 
                    val;
71
 
 
72
 
                val = parseInt(value, 10);
73
 
 
74
 
                if (Y.webui.refresh_timeout) {
75
 
                    clearTimeout(Y.webui.refresh_timeout);
76
 
                }
77
 
                if (val !== 0) {
78
 
                    Y.webui.refresh_interval = val * 1000;
79
 
                    callback();
80
 
                }
81
 
            };
82
 
            refresh_rate.on('change', onChange);
83
 
            refresh_enabled.on('change', function () {
84
 
                if (Y.webui.refresh_timeout) {
85
 
                    clearTimeout(Y.webui.refresh_timeout);
86
 
                }
87
 
 
88
 
                Y.webui.refresh_enabled = refresh_enabled.get('checked');
89
 
 
90
 
                if (Y.webui.refresh_enabled) {
91
 
                    callback();
92
 
                }
93
 
            });
94
 
            onChange();
 
52
 
 
53
        /**
 
54
         * Setup page auto-refresh.
 
55
         *
 
56
         * Immediately runs the callback when auto-refresh is set up
 
57
         * (page is loaded) then use Y.later() for periodically calling
 
58
         * the 'callback' at the `Y.webui.refresh_interval` rate.
 
59
         *
 
60
         * @method setup_auto_refresh
 
61
         */
 
62
        setup_auto_refresh: function (callback) {
 
63
            callback();
 
64
            Y.webui.refresh_timer = Y.later(
 
65
                Y.webui.refresh_interval, Y, callback, '', true);
95
66
        },
 
67
 
96
68
        get_workflow_data: function (api_url) {
97
69
            var wf_data = {},
98
70
                wf_str = {},
349
321
        },
350
322
        artifact_link: function (data, new_name) {
351
323
            var name = Y.webui.basename(data.name),
352
 
                link = Y.Node.create("<a/>");
 
324
                link = Y.Node.create('<a/>');
353
325
 
354
326
            // Lookup a corresponding tempurl.
355
327
            var tempurl = Y.webui.tempurls[name];
616
588
            }
617
589
 
618
590
            if (current_step !== "Completed" && short_status !== "Failed") {
619
 
              table.appendChild(Y.Node.create('<tr><td></td><td><a href="logview.html?ticket_id=' + data.id + '">Watch Build</a></tr>'));
 
591
              table.appendChild(Y.Node.create('<tr><td></td><td><a href="livelog?lander_unit=' + data.lander_unit + '">Watch Build</a></tr>'));
620
592
            }
621
593
 
622
594
            if (data.subticket) {
671
643
                }
672
644
            }
673
645
        },
 
646
 
 
647
        /**
 
648
         * Returns the ticket ID based on the window URL.
 
649
         *
 
650
         * Checks the known ticket page path (/ticket/<id>), then match
 
651
         * a valid integer ID.
 
652
         *
 
653
         * @method get_ticket_id
 
654
         */
674
655
        get_ticket_id: function () {
675
 
            var query = window.location.search.split('?')[1],
676
 
                ticket_id = null,
677
 
                ob;
678
 
 
679
 
            if (query) {
680
 
                ob = Y.QueryString.parse(query);
681
 
                ticket_id = ob.ticket_id;
682
 
            }
683
 
 
684
 
            return ticket_id;
 
656
            var path = Y.config.win.location.pathname;
 
657
            if (!path.match(/\/ticket\/\d+\//g)) {
 
658
                return null;
 
659
            }
 
660
            var id_match = path.match(/\d+/g);
 
661
            if (!id_match) {
 
662
                return null;
 
663
            }
 
664
            return id_match[0];
685
665
        },
 
666
 
 
667
        /**
 
668
         * Updates ticket information.
 
669
         *
 
670
         * @method update_ticket
 
671
         */
686
672
        update_ticket: function () {
687
673
            var ticket_id = Y.webui.get_ticket_id();
688
 
 
689
674
            if (ticket_id) {
690
675
                Y.webui.get_ticket(ticket_id, Y.one('#container'));
691
676
            }
692
 
 
693
 
            // we're done so allow more refreshes if needed.
694
 
            if (Y.webui.refresh_timeout) {
695
 
                clearTimeout(Y.webui.refresh_timeout);
696
 
                Y.webui.refresh_timeout = null;
697
 
            }
698
 
 
699
 
            if (Y.webui.refresh_enabled && !Y.webui.refresh_timeout && Y.webui.refresh_interval > 0) {
700
 
                Y.webui.refresh_timeout = setTimeout(Y.webui.update_ticket, Y.webui.refresh_interval);
701
 
            }
702
677
        },
703
678
        has_ticket: function (ticket_ids, id) {
704
679
            return ticket_ids[id] === true;
812
787
 
813
788
                            Y.webui.main_table.set('data', recordset);
814
789
                            Y.webui.main_table.render();
815
 
 
816
 
                            // we're done so allow more refreshes if needed.
817
 
                            if (Y.webui.refresh_timeout) {
818
 
                                clearTimeout(Y.webui.refresh_timeout);
819
 
                                Y.webui.refresh_timeout = null;
820
 
                            }
821
 
                            if (Y.webui.refresh_enabled && !Y.webui.refresh_timeout && Y.webui.refresh_interval > 0) {
822
 
                                Y.webui.refresh_timeout = setTimeout(status_callback, Y.webui.refresh_interval);
823
 
                            }
824
790
                        },
825
 
                        complete: function () {
826
 
                            if (Y.webui.refresh_enabled && !Y.webui.refresh_timeout && Y.webui.refresh_interval > 0) {
827
 
                                Y.webui.refresh_timeout = setTimeout(status_callback, Y.webui.refresh_interval);
828
 
                            }
829
 
                        }
830
791
                    }
831
792
                });
832
 
            } else {
833
 
                if (Y.webui.refresh_timeout) {
834
 
                    clearTimeout(Y.webui.refresh_timeout);
835
 
                    Y.webui.refresh_timeout = null;
836
 
                }
837
 
                if (Y.webui.refresh_enabled && !Y.webui.refresh_timeout && Y.webui.refresh_interval > 0) {
838
 
                    Y.webui.refresh_timeout = setTimeout(status_callback, Y.webui.refresh_interval);
839
 
                }
840
793
            }
841
794
        },
842
795
        add_item: function (item) {