1
0
mirror of https://github.com/peeringdb/peeringdb.git synced 2024-05-11 05:55:09 +00:00

Add attribute operational to netixlan #539

revert accidentally commited change to netixlan js finalize function
This commit is contained in:
Stefan Pratter
2020-04-10 09:03:12 +00:00
parent e630aea692
commit 3298b6626d
8 changed files with 137 additions and 21 deletions

View File

@ -1527,6 +1527,8 @@ class TestJSON(unittest.TestCase):
},
)
assert r_data["operational"]
SHARED["netixlan_id"] = r_data.get("id")
self.assert_update(
@ -2349,6 +2351,30 @@ class TestJSON(unittest.TestCase):
##########################################################################
def test_guest_005_list_filter_netixlan_operational(self):
# all netixlans are operational at this point,
# filtering by operational=False should return empty list
data = self.db_guest.all("netixlan", operational=0)
assert len(data) == 0
# set one netixlan to not operational
netixlan = NetworkIXLan.objects.first()
netixlan.operational=False
netixlan.save()
# assert that it is now returned in the operational=False
# result
data = self.db_guest.all("netixlan", operational=0)
assert len(data) == 1
assert data[0]["id"] == netixlan.id
##########################################################################
def test_guest_005_list_filter_netixlan_related_name(self):
data = self.db_guest.all("netixlan", name=SHARED["ix_rw_ok"].name)
self.assertEqual(len(data), 1)

View File

@ -0,0 +1,18 @@
# Generated by Django 2.2.9 on 2020-04-10 07:03
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('peeringdb_server', '0033_fac_contacts'),
]
operations = [
migrations.AddField(
model_name='networkixlan',
name='operational',
field=models.BooleanField(default=True),
),
]

View File

@ -1296,6 +1296,7 @@ class NetworkIXLanSerializer(ModelSerializer):
"ipaddr4",
"ipaddr6",
"is_rs_peer",
"operational",
] + HandleRefSerializer.Meta.fields
related_fields = ["net", "ixlan"]

View File

@ -1325,6 +1325,9 @@ twentyc.editable.module.register(
ixlnk.text(data.ix.name);
row.find(".exchange").html(ixlnk);
if(data.operational)
row.addClass("operational")
// if ixlan has a name, render it next to the exchange name
if(data.ixlan.name)
row.find(".exchange").append($('<span>').addClass('tiny suffix').text(data.ixlan.name));
@ -1366,6 +1369,13 @@ twentyc.editable.module.register(
},
finalize_update_netixlan : function(rowId, row, data) {
if(data.operational)
row.addClass("operational")
else
row.removeClass("operational")
},
// FINALIZERS: NETFAC

View File

@ -398,6 +398,23 @@ div.panel > .btn {
margin-bottom: 5px;
}
.editable-inline > div[data-edit-type] {
display: inline-block;
}
.mode-edit .netixlan-extra {
margin-top: 10px;
}
.glyphicon-warning-sign {
color: #b19400;
vertical-align: text-top;
}
.operational .not-operational {
display: none !important;
}
/* landing page: info */
div.landing_info {

View File

@ -42,11 +42,14 @@
{% for x in data.networks %}
<div class="row item">
<div class="row item {% if x.operational %}operational{% endif %}">
<div class="col-xs-5 col-sm-5 col-md-5">
<div class="peer" data-sort-value="{{ x.network.name|lower }}" data-filter-value="{{ x.network.name }}">
<a href="/{{ x.network|ref_tag }}/{{ x.network.id }}">{{ x.network.name }}</a>{% if x.ixlan.name %}<span class="tiny suffix">{{ x.ixlan.name }}</span>{% endif %}
<span class="glyphicon glyphicon-warning-sign not-operational" data-edit-toggled="view" data-toggle="tooltip" title="{% trans "Not operational" %}" aria-hidden="true"></span>
</div>
<div class="asn" data-sort-value="{{ x.asn }}" data-filter-value="{{ x.asn }}">{{ x.asn }}</div>
</div>
<div class="col-xs-4 col-sm-4 col-md-4">

View File

@ -1,3 +1,4 @@
{% load i18n %}
<!-- TEMPLATES -->
<div id="editable-templates">
@ -12,12 +13,27 @@
data-filter-name="exchange_name"
data-edit-name="exchange">
</div>
<div class="asn"
data-edit-type="readonly"
data-edit-name="asn"
data-filter-name="asn"
data-sort-name="asn">
</div>
<span class="glyphicon glyphicon-warning-sign not-operational" data-edit-toggled="view" data-toggle="tooltip" title="{% trans "Not operational" %}" aria-hidden="true"></span>
<div class="editable-inline netixlan-extra">
<div class="asn"
data-edit-type="readonly"
data-edit-name="asn"
data-filter-name="asn"
data-sort-name="asn">
</div>
<div
data-edit-type="bool"
data-edit-name="operational"
data-edit-toggled="edit"
data-sort-value="{{ x.operational }}"
data-edit-value="{{ x.operational }}">
</div>
<span data-edit-toggled="edit">{% trans "Operational" %}</span>
</div>
</div>
<div class="col-xs-5 col-sm-5 col-md-4">
<div data-edit-type="string"

View File

@ -45,7 +45,7 @@
{% for x in data.exchanges %}
<div class="row item" data-edit-id="{{ x.id }}" data-edit-label="{% trans "Network - Exchange link" %}: {{ x.ixlan.ix.name }}">
<div class="row item {% if x.operational %}operational{% endif %}" data-edit-id="{{ x.id }}" data-edit-label="{% trans "Network - Exchange link" %}: {{ x.ixlan.ix.name }}">
<div class="editable payload">
<div data-edit-name="net_id">{{ instance.id }}</div>
<div data-edit-name="ixlan_id">{{ x.ixlan_id }}</div>
@ -55,21 +55,35 @@
<a class="btn-row-delete" data-edit-toggled="edit" data-edit-action="remove">&times;</a>
{% endif %}
<div class="exchange" data-sort-value="{{ x.ixlan.ix.name }}" data-filter-value="{{ x.ixlan.ix.name }}">
<a href="/{{x.ixlan.ix|ref_tag}}/{{ x.ixlan.ix.id }}">{{ x.ixlan.ix.name }}</a>{% if x.ixlan.name %}<span class="tiny suffix">{{ x.ixlan.name }}</span>{% endif %}
<a href="/{{x.ixlan.ix|ref_tag}}/{{ x.ixlan.ix.id }}">{{ x.ixlan.ix.name }}</a>
</div>
<div class="asn{% if permissions.can_write and x.asn != x.network.asn %} mark-value-error{% endif %}"
{% if permissions.can_write and x.asn != x.network.asn %}
data-toggle="tooltip"
data-placement="left"
title="{% trans "Entry needs to be moved to correct network" %}"
{% endif %}
data-edit-type="readonly"
data-edit-name="asn"
data-edit-value="{{ x.asn }}"
data-sort-value="{{ x.asn }}"
data-filter-value="{{ x.asn }}">
{{ x.asn }}
<span class="glyphicon glyphicon-warning-sign not-operational" data-edit-toggled="view" data-toggle="tooltip" title="{% trans "Not operational" %}" aria-hidden="true"></span>
<div class="editable-inline netixlan-extra">
<div class="asn{% if permissions.can_write and x.asn != x.network.asn %} mark-value-error{% endif %}"
{% if permissions.can_write and x.asn != x.network.asn %}
data-toggle="tooltip"
data-placement="left"
title="{% trans "Entry needs to be moved to correct network" %}"
{% endif %}
data-edit-type="readonly"
data-edit-name="asn"
data-edit-value="{{ x.asn }}"
data-sort-value="{{ x.asn }}"
data-filter-value="{{ x.asn }}">
{{ x.asn }}
</div>
<div
data-edit-type="bool"
data-edit-name="operational"
data-edit-toggled="edit"
data-sort-value="{{ x.operational }}"
data-edit-value="{{ x.operational }}">
</div>
<span data-edit-toggled="edit">{% trans "Operational" %}</span>
</div>
</div>
<div class="col-xs-5 col-sm-5 col-md-4">
<div {% if permissions.can_write %}
@ -106,6 +120,7 @@
data-edit-value="{{ x.is_rs_peer }}">
<img class="checkmark" src="{{ STATIC_URL }}checkmark{% if not x.is_rs_peer|as_bool %}-off{% endif %}.png" alt="RS PEER" />
</div>
</div>
</div>
@ -171,6 +186,16 @@
</div>
</div>
<div class="row view_row">
<div class="view_field col-xs-4 col-sm-5 col-md-4">Operational</div>
<div class="view_value col-xs-8 col-sm-7 col-md-8">
<div data-edit-type="bool"
data-edit-name="operational"
data-edit-value="true">
</div>
</div>
</div>