diff --git a/app/forms.py b/app/forms.py index 7bf1511..013827a 100644 --- a/app/forms.py +++ b/app/forms.py @@ -8,7 +8,7 @@ class LoginForm(FlaskForm): class NewPrefixForm(FlaskForm): subnet = StringField(validators=[DataRequired(),IPAddress(ipv4=True),Length(max=128)]) - prefix = IntegerField(validators=[DataRequired(),NumberRange(min=20,max=32)]) + prefix = SelectField(choices=[(30,'/30'),(29,'/29'),(28,'/28'),(27,'/27'),(26,'/26'),(25,'/25'),(24,'/24'),(23,'/23'),(22,'/22')],validators=[DataRequired()]) description = StringField(validators=[Length(max=128)]) class NewAllocationForm(FlaskForm): diff --git a/app/models.py b/app/models.py index 329b6a3..99ceccf 100644 --- a/app/models.py +++ b/app/models.py @@ -13,13 +13,14 @@ class Network(db.Model): prefix = db.Column(db.Integer()) network_address = db.Column(db.String(16),unique=True) hosts = db.Column(db.Integer()) - description = db.Column(db.String(32),unique=True) + description = db.Column(db.String(32)) class Allocation(db.Model): ipv4 = db.Column(db.String(16),primary_key=True,unique=True) net_id = db.Column(db.Integer(),db.ForeignKey('network.id')) hostname = db.Column(db.String(32)) description = db.Column(db.String(64)) + is_used = db.Column(db.Boolean(),default=False) device_id = db.Column(db.Integer(),db.ForeignKey('inventory.id')) class Inventory(db.Model): diff --git a/app/routes/r_base.py b/app/routes/r_base.py index dec900d..a980138 100644 --- a/app/routes/r_base.py +++ b/app/routes/r_base.py @@ -23,7 +23,7 @@ def home(): def dashboard(): db_networks = Network.query.count() - db_allocations = Allocation.query.count() + db_allocations = Allocation.query.filter_by(is_used=True).count() db_inventory = Inventory.query.count() db_users = User.query.count() available_alloc = 0 @@ -52,12 +52,16 @@ def networks(): form = NewPrefixForm() if request.method == 'POST' and form.validate_on_submit(): try: - network = IPv4Network(f"{str(form.subnet.data)}/{str(form.prefix.data)}") + network = IPv4Network(f"{str(form.subnet.data)}/{str(form.prefix.data)}", False) - add_net = Network(network_address=str(network.network_address),prefix=network.prefixlen,hosts=network.num_addresses,description=str(form.description.data)) + add_net = Network(network_address=str(network.network_address),prefix=network.prefixlen,hosts=network.num_addresses-2,description=str(form.description.data)) db.session.add(add_net) db.session.commit() + for ip in network.hosts(): + db.session.add(Allocation(ipv4=str(ip), net_id=add_net.id)) + + db.session.commit() return redirect(url_for('base.networks')) except: @@ -73,8 +77,14 @@ def networks(): def allocations(net_id): active_page = request.args.get('page', type=int) + if active_page == None: + active_page = 0 + + next_page = active_page+1 + prev_page = active_page-1 + db_network = Network.query.filter_by(id=net_id).first() - db_allocations = db.paginate(db.select(Allocation).filter_by(net_id=net_id), per_page=12 ) + db_allocations = db.paginate(db.select(Allocation).filter_by(net_id=net_id), per_page=15 ) form = NewAllocationForm() if request.method == 'POST' and form.validate_on_submit(): @@ -97,7 +107,7 @@ def allocations(net_id): elif form.errors: flash(form.errors, 'danger') - return render_template('panel/allocations.html', title="Allocations", is_networks=True, app_version=app_version, form=form, allocations=db_allocations, network=db_network, Inventory=Inventory, active_page=active_page, navcolor='dark') + return render_template('panel/allocations.html', title="Allocations", is_networks=True, app_version=app_version, form=form, allocations=db_allocations, network=db_network, Inventory=Inventory, active_page=active_page, next_page=next_page, prev_page=prev_page, navcolor='dark') ## MODAL ROUTES diff --git a/app/templates/panel/allocations.html b/app/templates/panel/allocations.html index 89132fd..0825a96 100644 --- a/app/templates/panel/allocations.html +++ b/app/templates/panel/allocations.html @@ -6,10 +6,9 @@
| Network | IPv4 | Hostname | Description | @@ -20,10 +19,9 @@|||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{network.network_address}} | -{{allocation.ipv4}} | +{{allocation.ipv4}} | {{allocation.hostname}} | -{{allocation.description}} | +{{allocation.description}} |
{% if Inventory.query.filter_by(id=allocation.device_id).first() %}
link
@@ -81,14 +79,29 @@
+
+
+
-
+
+ {{ allocations.first }} - {{ allocations.last }} of {{ allocations.total }}
+
+ {{network.id}}
{{network.network_address}} |
{{network.prefix}} |
- {{Allocation.query.filter_by(net_id=network.id).count()}} / {{network.hosts}} |
+ {{Allocation.query.filter_by(net_id=network.id,is_used=True).count()}} / {{network.hosts}} |
{{network.description}} |
Allocations
| |