Skip to content

Commit

Permalink
Merge pull request #401 from brickbox-io/master
Browse files Browse the repository at this point in the history
Merge pull request #398 from brickbox-io/dependabot/github_actions/actions/setup-node-3.3.0
  • Loading branch information
justinmerrell authored Jun 13, 2022
2 parents 118b00d + 43de9ce commit 6aef0ab
Show file tree
Hide file tree
Showing 29 changed files with 551 additions and 45 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ESlint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
uses: actions/checkout@v3

- name: Set up Node.js
uses: actions/setup-node@v3.2.0
uses: actions/setup-node@v3.3.0
with:
node-version: 16

Expand Down
64 changes: 64 additions & 0 deletions bb_dashboard/static/js/bricks/configure.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
function OpenConfiguration(brick_id) {
var formData = new FormData();
var xhttp = new XMLHttpRequest();
var url = '/vm/brick/info'

formData.append('brick_id', brick_id);

xhttp.onload = function () {
var birck_info = JSON.parse(this.responseText);
console.log(birck_info);

document.getElementById('config-current_gpu').innerHTML = birck_info.gpu_count;
document.getElementById('config-current_gpu').dataset.count = birck_info.gpu_count;

document.getElementById('config-current_cpu').innerHTML = birck_info.cpu_count;
document.getElementById('config-current_cpu').dataset.count = birck_info.cpu_count;

document.getElementById('config-current_memory').innerHTML = birck_info.memory_quantity;
document.getElementById('config-current_memory').dataset.count = birck_info.memory_quantity;

document.getElementById('SaveResourceChanges').dataset.brick_id = brick_id;

$("#brick_configure").modal('toggle');
};

xhttp.open('POST', url, true);
xhttp.setRequestHeader("X-CSRFToken", csrftoken);
xhttp.send(formData);
}

function IncreaseResourceCount(resource) {
var count = parseInt(document.getElementById('config-current_'+ resource).dataset.count);
var new_count = parseInt(count) + 1;

document.getElementById('config-current_'+ resource).innerHTML = new_count;
document.getElementById('config-current_'+ resource).dataset.count = new_count;
}

function DecreaseResourceCount(resource) {
var count = parseInt(document.getElementById('config-current_'+ resource).dataset.count);
var new_count = parseInt(count) - 1;

document.getElementById('config-current_'+ resource).innerHTML = new_count;
document.getElementById('config-current_'+ resource).dataset.count = new_count;
}

function SaveResourceChanges(brick_id) {
var formData = new FormData();
var xhttp = new XMLHttpRequest();
var url = '/vm/brick/update_resources'

formData.append('brick_id', brick_id);
formData.append('gpu_count', document.getElementById('config-current_gpu').dataset.count);
formData.append('cpu_count', document.getElementById('config-current_cpu').dataset.count);
formData.append('memory_quantity', document.getElementById('config-current_memory').dataset.count);

xhttp.onload = function () {
$("#brick_configure").modal('toggle');
};

xhttp.open('POST', url, true);
xhttp.setRequestHeader("X-CSRFToken", csrftoken);
xhttp.send(formData);
}
5 changes: 3 additions & 2 deletions bb_dashboard/templates/bricks.html
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ <h4 class="title">Add Brick Instance</h4>
GPU - x1 3090 <br>
vCPU - x4 Cores <br>
RAM - 12 GB <br>
SSD - 25 GB
SSD - 50 GB
</p>
</div>

Expand Down Expand Up @@ -87,7 +87,7 @@ <h4 class="title">Add Brick Instance</h4>
GPU - x1 3070 <br>
vCPU - x4 Cores <br>
RAM - 12 GB <br>
SSD - 25 GB
SSD - 50 GB
</p>
</div>

Expand Down Expand Up @@ -155,6 +155,7 @@ <h5 class="title">Brick Wall</h5>

{% include "modals/brick_destroy_confirm.html" %}
{% include "modals/set_root_password.html" %}
{% include "bricks/modals/configure.html" %}

{% endblock content %}

Expand Down
45 changes: 26 additions & 19 deletions bb_dashboard/templates/bricks/bricks-instances_table.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,14 @@
<!-- <td class="text-center">1</td> -->

<!-- Brick Name -->
<td>{{ brick.virt_brick.name }}</td>
<td>{{ brick.virt_brick.name }}
<button type="button" rel="tooltip" class="btn btn-default btn-link btn-icon btn-sm" data-brickid="{{ brick.virt_brick.id }}" onclick="OpenConfiguration(this.dataset.brickid)">
<i class="material-icons">
tune
</span>

</i>
</td>

{% if brick.virt_brick.ssh_port != None %}

Expand All @@ -24,13 +31,13 @@
<!-- RUNNING - Brick Actions -->
<td class="td-actions text-right">
<button type="button" rel="tooltip" class="btn btn-info btn-link btn-icon btn-sm" id="reboot_button" data-brickid="{{ brick.virt_brick.id }}" onclick="BrickReboot(this.dataset.brickid)">
<i class="tim-icons icon-refresh-01"></i>
<i class="material-icons">restart_alt</i>
</button>
<button type="button" rel="tooltip" class="btn btn-success btn-link btn-icon btn-sm" id="power_button" data-brickid="{{ brick.virt_brick.id }}" onclick="BrickPause(this.dataset.brickid)">
<i class="tim-icons icon-button-pause"></i>
<i class="material-icons">pause</i>
</button>
<button type="button" rel="tooltip" class="btn btn-danger btn-link btn-icon btn-sm" data-brickid="{{ brick.virt_brick.id }}" data-brickname="{{ brick.virt_brick.name }}" onclick="BrickDestroy(this.dataset.brickid, this.dataset.brickname)">
<i class="tim-icons icon-trash-simple"></i>
<i class="material-icons">delete_forever</i>
</button>
</td>

Expand All @@ -41,13 +48,13 @@
<!-- REBOOTING - Brick Actions -->
<td class="td-actions text-right">
<button type="button" rel="tooltip" class="btn btn-info btn-link btn-icon btn-sm" disabled>
<i class="tim-icons icon-refresh-01"></i>
<i class="material-icons">restart_alt</i>
</button>
<button type="button" rel="tooltip" class="btn btn-success btn-link btn-icon btn-sm" disabled>
<i class="tim-icons icon-button-pause"></i>
<i class="material-icons">pause</i>
</button>
<button type="button" rel="tooltip" class="btn btn-danger btn-link btn-icon btn-sm" data-brickid="{{ brick.virt_brick.id }}" data-brickname="{{ brick.virt_brick.name }}" onclick="BrickDestroy(this.dataset.brickid, this.dataset.brickname)">
<i class="tim-icons icon-trash-simple"></i>
<i class="material-icons">delete_forever</i>
</button>
</td>

Expand All @@ -58,13 +65,13 @@
<!-- BOOTING - Brick Actions -->
<td class="td-actions text-right">
<button type="button" rel="tooltip" class="btn btn-info btn-link btn-icon btn-sm" disabled>
<i class="tim-icons icon-refresh-01"></i>
<i class="material-icons">restart_alt</i>
</button>
<button type="button" rel="tooltip" class="btn btn-success btn-link btn-icon btn-sm" disabled>
<i class="tim-icons icon-button-pause"></i>
<i class="material-icons">pause</i>
</button>
<button type="button" rel="tooltip" class="btn btn-danger btn-link btn-icon btn-sm" data-brickid="{{ brick.virt_brick.id }}" data-brickname="{{ brick.virt_brick.name }}" onclick="BrickDestroy(this.dataset.brickid, this.dataset.brickname)">
<i class="tim-icons icon-trash-simple"></i>
<i class="material-icons">delete_forever</i>
</button>
</td>

Expand All @@ -76,13 +83,13 @@
<!-- OFFLINE - Brick Actions -->
<td class="td-actions text-right">
<button type="button" rel="tooltip" class="btn btn-info btn-link btn-icon btn-sm" disabled>
<i class="tim-icons icon-refresh-01"></i>
<i class="material-icons">restart_alt</i>
</button>
<button type="button" rel="tooltip" class="btn btn-success btn-link btn-icon btn-sm" disabled>
<i class="tim-icons icon-button-pause"></i>
<i class="material-icons">pause</i>
</button>
<button type="button" rel="tooltip" class="btn btn-danger btn-link btn-icon btn-sm" disabled>
<i class="tim-icons icon-trash-simple"></i>
<i class="material-icons">delete_forever</i>
</button>
</td>

Expand All @@ -93,13 +100,13 @@
<!-- PAUSED - Brick Actions -->
<td class="td-actions text-right">
<button type="button" rel="tooltip" class="btn btn-info btn-link btn-icon btn-sm" id="reboot_button" disabled>
<i class="tim-icons icon-refresh-01"></i>
<i class="material-icons">restart_alt</i>
</button>
<button type="button" rel="tooltip" class="btn btn-success btn-link btn-icon btn-sm" id="power_button" data-brickid="{{ brick.virt_brick.id }}" onclick="BrickPlay(this.dataset.brickid)">
<i class="tim-icons icon-triangle-right-17"></i>
<i class="material-icons">play_arrow</i>
</button>
<button type="button" rel="tooltip" class="btn btn-danger btn-link btn-icon btn-sm" data-brickid="{{ brick.virt_brick.id }}" data-brickname="{{ brick.virt_brick.name }}" onclick="BrickDestroy(this.dataset.brickid, this.dataset.brickname)">
<i class="tim-icons icon-trash-simple"></i>
<i class="material-icons">delete_forever</i>
</button>
</td>

Expand All @@ -123,13 +130,13 @@
<td class="text-right"> Provisioning </td>
<td class="td-actions text-right">
<button type="button" rel="tooltip" class="btn btn-info btn-link btn-icon btn-sm" disabled>
<i class="tim-icons icon-refresh-01"></i>
<i class="material-icons">restart_alt</i>
</button>
<button type="button" rel="tooltip" class="btn btn-success btn-link btn-icon btn-sm" disabled>
<i class="tim-icons icon-button-pause"></i>
<i class="material-icons">pause</i>
</button>
<button type="button" rel="tooltip" class="btn btn-danger btn-link btn-icon btn-sm" disabled>
<i class="tim-icons icon-trash-simple"></i>
<i class="material-icons">delete_forever</i>
</button>
</td>

Expand Down
76 changes: 76 additions & 0 deletions bb_dashboard/templates/bricks/modals/configure.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<div class="modal fade" tabindex="-1" role="dialog" aria-labelledby="ConfigureBrick" aria-hidden="true" id="brick_configure">
<div class="modal-dialog modal-md">
<div class="modal-content">
<div class="modal-body">
Configure Brick

<table>

<!-- Add/Remove GPUs -->
<tr>
<td>
GPUs
</td>
<td>
<button type="button" class="btn btn-default btn-link btn-icon btn-sm" onclick="DecreaseResourceCount('gpu')">
<i class=" material-icons">indeterminate_check_box</i>
</button>

<span id="config-current_gpu"></span>

<button type="button" class="btn btn-default btn-link btn-icon btn-sm" onclick="IncreaseResourceCount('gpu')">
<i class="material-icons">add_box</i>
</button>
</td>
</tr>


<!-- Add/Remove vCPUs -->
<tr>
<td>
vCPUs
</td>
<td>
<button type="button" class="btn btn-default btn-link btn-icon btn-sm" onclick="DecreaseResourceCount('cpu')" disabled>
<i class="material-icons">indeterminate_check_box</i>
</button>

<span id="config-current_cpu"></span>

<button type="button" class="btn btn-default btn-link btn-icon btn-sm" onclick="IncreaseResourceCount('cpu')" disabled>
<i class="material-icons">add_box</i>
</button>
</td>
</tr>

<!-- Increase/Decrease Memory -->
<tr>
<td>
Memory
</td>
<td>
<button type="button" class="btn btn-default btn-link btn-icon btn-sm" onclick="DecreaseResourceCount('memory')" disabled>
<i class="material-icons">indeterminate_check_box</i>
</button>

<span id="config-current_memory"></span>
<span id="config-current_memory">GB</span>

<button type="button" class="btn btn-default btn-link btn-icon btn-sm" onclick="IncreaseResourceCount('memory')" disabled>
<i class="material-icons">add_box</i>
</button>
</td>
</tr>


</table>

</div>

<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" id="SaveResourceChanges" onclick="SaveResourceChanges(this.dataset.brick_id)">Save changes</button>
</div>
</div>
</div>
</div>
3 changes: 2 additions & 1 deletion bb_dashboard/templates/includes/scripts.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,9 @@
<script src="{% static 'js/demo.js?v=1.0.0' %}"></script>
<script src="{% static 'js/chart-month_breakdown.js' %}"></script>

<!-- ---------------------------- Instances JS ----------------------------- -->
<!-- ------------------------------ Bricks JS ------------------------------ -->
<script src="{% static 'js/bricks/instances.js' %}"></script>
<script src="{% static 'js/bricks/configure.js' %}"></script>

<!-- ---------------------------- Developer JS ----------------------------- -->
<script src="{% static 'js/developer/custom_scripts.js' %}"></script>
Expand Down
2 changes: 1 addition & 1 deletion bb_data/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class ColocationClientOwnerAdmin(admin.ModelAdmin):
'''
Admin configuration for ColocationClientOwner model.
'''
list_display = ('owner_profile', 'client_account')
list_display = ('owner_profile', 'client_account',)

class CryptoSnapshotAdmin(admin.ModelAdmin):
'''
Expand Down
18 changes: 18 additions & 0 deletions bb_data/migrations/0060_billinghistory_invoice_number.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 3.2.12 on 2022-06-13 18:33

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('bb_data', '0059_auto_20220511_1324'),
]

operations = [
migrations.AddField(
model_name='billinghistory',
name='invoice_number',
field=models.CharField(blank=True, max_length=100, null=True),
),
]
3 changes: 2 additions & 1 deletion bb_data/models/models_stripe.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,9 @@ class BillingHistory(models.Model):
usage = models.ForeignKey(ResourceTimeTracking, on_delete=models.CASCADE, blank=True,null=True)
amount_alt = models.DecimalField(max_digits=12, decimal_places=2, default=0.00)

invoice_number = models.CharField(max_length=100, blank=True, null=True) # Stripe Invoice No.
invoice_link = models.TextField(blank=True, null=True)
invoice_id = models.CharField(max_length=100, blank=True, null=True) # Stripe Invoice ID
invoice_id = models.CharField(max_length=100, blank=True, null=True) # Stripe Invoice ID

status = models.CharField(max_length=32, choices=invoice_status_choices, default='unpaid')

Expand Down
4 changes: 2 additions & 2 deletions bb_tasks/tasks/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from .callable import (
pause_vm_subprocess, play_vm_subprocess,
reboot_vm_subprocess, destroy_vm_subprocess, close_ssh_port,
destroy_vm_with_open_tabs,
destroy_vm_with_open_tabs, attach_gpu_subprocess
)

from .system import (
Expand All @@ -25,5 +25,5 @@
'catch_clone_errors', 'remove_stale_clone',
'prepare_gpu_background_task', 'stop_bg', 'start_bg',
'threshold_resource_invoicing', 'monthly_resource_invoicing',
'destroy_vm_with_open_tabs'
'destroy_vm_with_open_tabs', 'attach_gpu_subprocess'
]
16 changes: 15 additions & 1 deletion bb_tasks/tasks/callable.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

from bb_data.models import UserProfile, ResourceTimeTracking
from bb_vm.models import (
PortTunnel, VirtualBrick, HostFoundation, VirtualBrickOwner
PortTunnel, VirtualBrick, HostFoundation, VirtualBrickOwner, GPU
)


Expand Down Expand Up @@ -66,6 +66,20 @@ def destroy_vm_subprocess(instance_id, host_id=None):
if host_id is None:
brick.delete()

# -------------------------- Attatch Additional GPU -------------------------- #
@shared_task
def attach_gpu_subprocess(instance_id, gpu_id):
'''
Attatch a GPU to a VM.
'''
brick = VirtualBrick.objects.get(id=instance_id)
host = brick.host

virtual_machine = box.Brick(host_port=host.ssh_port, brick_id=f'{str(instance_id)}')

gpu_xml = GPU.objects.get(id=gpu_id).xml
virtual_machine.add_gpu(xml_data=f'{str(gpu_xml)}')

# ---------------------------- Terminate SSH Port ---------------------------- #
@shared_task
def close_ssh_port(port_number):
Expand Down
Loading

0 comments on commit 6aef0ab

Please sign in to comment.