<% set itype="balancer" %>
<% set ctype="prod" %>
<% set prj="l7-balancer-yastatic" %>
<% set namespace="yastatic" %>
<% set marty_alerts_services = ['yastatic_errors_404', 'yastatic_errors_4xx', 'yastatic_errors_500', 'yastatic_p99_time'] %>
<% set notifications = [
    {
        "template_name": "on_status_change",
        "template_kwargs": {
            "status": "CRIT",
            "method": ["telegram"],
            "login": ["xpahos", "valentinrueda"]
        }
    }] %>
    
<% set notifications_marty = [
    {
        "template_name": "on_status_change",
        "template_kwargs": {
            "status": "CRIT",
            "method": ["telegram"],
            "login": ["xpahos", "valentinrueda"]
        }
    },
    {
        "template_name": "on_status_change",
        "template_kwargs": {
            "status": "CRIT",
            "method": ["sms"],
            "login": ["robot-searchmon"]
        }
    }] %>

<% set alerts = [
    {
        "service": "yastatic_errors_404",
        "signal": """perc(
            max(
                diff(
                    diff(
                        diff(
                            diff(
                                balancer_report-report-service_total-outgoing_404_summ,
                                balancer_report-report-requests_to_awacs-balancer-health-check-outgoing_404_summ
                            ),
                            balancer_report-report-requests_to_slbping-outgoing_404_summ
                        ),
                        balancer_report-report-requests_to_upstream_ok-outgoing_404_summ
                    ),
                    balancer_report-report-everybodybecoolthisis-outgoing_404_summ
                ),
                0
            ),
            balancer_report-report-service_total-requests_summ
        )""",
        "levels": {
            "all": {
                "warn": [ 5, 10 ],
                "crit": [ 10, None ],
            },
            "dc": {
                "warn": [ 80, 95 ],
                "crit": [ 95, None ],
            }
        },
    },
    {
        "service": "yastatic_errors_4xx",
        "signal": """perc(
            max(
                diff(
                    diff(
                        diff(
                            diff(
                                balancer_report-report-service_total-outgoing_4xx_summ,
                                balancer_report-report-requests_to_awacs-balancer-health-check-outgoing_4xx_summ
                            ),
                            balancer_report-report-requests_to_slbping-outgoing_4xx_summ
                        ),
                        balancer_report-report-requests_to_upstream_ok-outgoing_4xx_summ
                    ),
                    balancer_report-report-everybodybecoolthisis-outgoing_4xx_summ
                ),
                0
            ),
            balancer_report-report-service_total-requests_summ
        )""",
        "levels": {
            "all": {
                "warn": [ 80, 95 ],
                "crit": [ 95, None ],
            },
            "dc": {
                "warn": [ 80, 95 ],
                "crit": [ 95, None ],
            }
        },
    },
    {
        "service": "yastatic_errors_5xx",
        "signal": """perc(
            max(
                diff(
                    diff(
                        diff(
                            diff(
                                balancer_report-report-service_total-outgoing_5xx_summ,
                                balancer_report-report-requests_to_awacs-balancer-health-check-outgoing_5xx_summ
                            ),
                            balancer_report-report-requests_to_slbping-outgoing_5xx_summ
                        ),
                        balancer_report-report-requests_to_upstream_ok-outgoing_5xx_summ
                    ),
                    balancer_report-report-everybodybecoolthisis-outgoing_5xx_summ
                ),
                0
            ),
            balancer_report-report-service_total-requests_summ
        )""",
        "levels": {
            "all": {
                "warn": [ 80, 95 ],
                "crit": [ 95, None ],
            },
            "dc": {
                "warn": [ 80, 95 ],
                "crit": [ 95, None ],
            }
        },
    },
    {
        "service": "yastatic_cache_miss",
        "signal": """perc(
            balancer_cached-cache-miss_summ,
            balancer_report-report-service_total-requests_summ
        )""",
        "levels": {
            "all": {
                "warn": [ 80, 95 ],
                "crit": [ 95, None ],
            },
            "dc": {
                "warn": [ 80, 95 ],
                "crit": [ 95, None ],
            }
        },
    },
    {
        "service": "yastatic_s3_retry",
        "signal": """perc(balancer_cached-s3-retry-max_summ, 100)""",
        "levels": {
            "all": {
                "warn": [ 5, 10 ],
                "crit": [ 10, None ],
            },
            "dc": {
                "warn": [ 5, 10 ],
                "crit": [ 10, None ],
            }
        },
    },
    {
        "service": "yastatic_p99_time",
        "signal": """quant(balancer_report-report-service_total-processing_time_hgram, 99)""",
        "levels": {
            "all": {
                "warn": [ 3, 6 ],
                "crit": [ 6, None ],
            },
            "dc": {
                "warn": [ 3, 6 ],
                "crit": [ 6, None ],
            }
        },
    },
    {
        "service": "yastatic_2xx_trend",
        "signal": """push-balancer_low-traffic_xxxx""",
        "levels": {
            "all": {
                "warn": [ 20, 20 ],
                "crit": [ None, 20 ],
            },
            "dc": {
                "warn": [ 20, 20 ],
                "crit": [ None, 20 ],
            },
        },
        "global": true,
    },
    {
        "service": "yastatic_2xx_trend_up",
        "signal": """push-balancer_low-traffic_xxxx""",
        "levels": {
            "all": {
                "warn": [ 180, 180 ],
                "crit": [ 180, None ],
            },
            "dc": {
                "warn": [ 180, 180 ],
                "crit": [ 180, None ],
            }
        },
        "global": true,
    },


] %>

[
<% for current_alert in alerts %>
    <% for comb in list_tags_combinations(itype, prj=prj, ctype=[ctype,], geo=['man', 'sas', 'msk']) %>
        <% if comb["geo"] == "msk" %>
            <% for tier in ["iva", "myt"] %>
                <% set service = "%s.%s"|format(tier, current_alert['service']) %>
                <% set host = "yastatic.%s.%s.%s"|format(comb["prj"],tier,comb["ctype"]) %>
                <% set base_check = {"name_tmpl": service} %>
                <% if "global" in current_alert and current_alert['global'] %>
                    <% set current_tags = {"itype": itype, "prj": prj} %>
                <% else %>
                    <% set current_tags = {"itype": itype, "prj": prj, "geo": comb["geo"], "tier": tier} %>
                <% endif %>

        << Alert(base=base_check|merge_with_dict({"signal": current_alert['signal'], "warn": current_alert['levels']['dc']['warn'], "crit": current_alert['levels']['dc']['crit']}),
            juggler_check = {
                "host": host,
                "service": service,
                "notifications": notifications,
                "aggregator": "logic_or",
                "aggregator_kwargs": { "ignore_nodata": true},
                "namespace": namespace,
                "tags":["yastatic",]
            },
            tags=current_tags
        ) >>,
            <% endfor %>
        <% else %>
            <% set service = "%s.%s"|format(comb["geo"], current_alert['service']) %>
            <% set host = "yastatic.%s.%s.%s"|format(comb["prj"],comb["geo"],comb["ctype"]) %>
            <% set base_check = {"name_tmpl": service} %>
            
            <% if "global" in current_alert and current_alert['global'] %>
                <% set current_tags = {"itype": itype, "prj": prj} %>
            <% else %>
                <% set current_tags = {"itype": itype, "prj": prj, "geo": comb["geo"] } %>
            <% endif %>

        << Alert(base=base_check|merge_with_dict({"signal": current_alert['signal'], "warn": current_alert['levels']['dc']['warn'], "crit": current_alert['levels']['dc']['crit']}),
            juggler_check = {
                "host": host,
                "service": service,
                "notifications": notifications,
                "aggregator": "logic_or",
                "aggregator_kwargs": { "ignore_nodata": true},
                "namespace": namespace,
                "tags":["yastatic",]
            },
            tags=current_tags
        ) >>,
        <% endif %>
    <% endfor %>

        <% set service = "all.%s"|format(current_alert['service']) %>
        <% set host = "yastatic.%s.all.%s"|format(prj,ctype) %>
        <% set base_check = {"name_tmpl": service} %>
        <% set current_tags = {"itype": itype, "prj": prj } %>

        <% if current_alert['service'] in marty_alerts_services %>

        << Alert(base=base_check|merge_with_dict({"signal": current_alert['signal'], "warn": current_alert['levels']['all']['warn'], "crit": current_alert['levels']['all']['crit']}),
            juggler_check = {
                "host": host,
                "service": service,
                "notifications": notifications_marty,
                "aggregator": "logic_or",
                "aggregator_kwargs": { "ignore_nodata": true},
                "namespace": namespace,
                "tags":["yastatic", "marty"]
            },
            tags=current_tags
        ) >>,
        
        <% else %>
        
        << Alert(base=base_check|merge_with_dict({"signal": current_alert['signal'], "warn": current_alert['levels']['all']['warn'], "crit": current_alert['levels']['all']['crit']}),
            juggler_check = {
                "host": host,
                "service": service,
                "notifications": notifications,
                "aggregator": "logic_or",
                "aggregator_kwargs": { "ignore_nodata": true},
                "namespace": namespace,
                "tags":["yastatic",]
            },
            tags=current_tags
        ) >>,
        
        <% endif %>

<% endfor %>

]
