此代码使用flask获取系统性能读数,并使用每秒刷新的Chart将其绘制在Django网页上。我正在尝试将数据存储到postgresql中,但它不起作用。没有数据插入到在数据库中创建的表中。
views.py
from django.shortcuts import render
import requests
from django.http import HttpResponse, request
from .models import Usage
def monitor(request):
url = "http://127.0.0.1:5000/stats"
data = requests.get(url)
print(data.text)
data2 = data.text
return render(request, "home.html", {'alldata': data2})
def cpu_monitor(request):
url = "http://127.0.0.1:5000/cpu"
cpu_data = requests.get(url)
cpu_data2 = cpu_data.json()
for key in cpu_data2:
cpu = cpu_data2['CPU']
time = cpu_data2['Time']
print(cpu)
print(time)
val = key
return render(request, "chart.html", {'data': val})
def cp(request):
url = "http://127.0.0.1:5000/cpu"
cpu_data = requests.get(url)
cpu_data2 = cpu_data.json()
for key in cpu_data2:
cpu = cpu_data2['CPU']
time = cpu_data2['Time']
print(cpu)
print(time)
val = [cpu]
return HttpResponse(val)
def mm(request):
url = "http://127.0.0.1:5000/memory"
memory_data = requests.get(url)
memory_data2 = memory_data.json()
for key in memory_data2:
memory = memory_data2['Memory Percentage']
time = memory_data2['Time']
print(memory)
print(time)
mem = [memory]
return HttpResponse(mem)
def dk(request):
url = "http://127.0.0.1:5000/disk"
disk_data = requests.get(url)
disk_data2 = disk_data.json()
for key in disk_data2:
disk = disk_data2['Used Partition']
time = disk_data2['Time']
print(disk)
print(time)
dsk = [disk]
return HttpResponse(dsk)
def dkf(request):
url = "http://127.0.0.1:5000/diskfree"
free_disk_data = requests.get(url)
free_disk_data2 = free_disk_data.json()
for key in free_disk_data2:
free_disk = free_disk_data2['Free Partition']
time = free_disk_data2['Time']
print(free_disk)
print(time)
dskf = [free_disk]
return HttpResponse(dskf)
def ib(request):
url = "http://127.0.0.1:5000/inb"
ib_data = requests.get(url)
ib_data2 = ib_data.json()
for key in ib_data2:
ibn = ib_data2['Received Bytes']
time = ib_data2['Time']
print(ibn)
print(time)
ibd = [ibn]
return HttpResponse(ibd)
def ob(request):
url = "http://127.0.0.1:5000/oub"
ob_data = requests.get(url)
ob_data2 = ob_data.json()
for key in ob_data2:
obn = ob_data2['Received Bytes']
time = ob_data2['Time']
print(obn)
print(time)
obd = [obn]
return HttpResponse(obd)
def insert():
sysMon = Usage
sysMon.cpu = cp(request)
sysMon.memory = mm(request)
sysMon.freeDisk = dk(request)
sysMon.usedDisk = dkf(request)
sysMon.inbound = ib(request)
sysMon.outbound = ob(request)
sysMon.save()models.py
from django.db import models
class Usage(models.Model):
cpu = models.CharField(max_length=200, null=True)
memory = models.CharField(max_length=200, null=True)
freeDisk = models.CharField(max_length=200, null=True)
usedDisk = models.CharField(max_length=200, null=True)
inbound = models.CharField(max_length=200, null=True)
outbound = models.CharField(max_length=200, null=True)任何帮助都将受到高度的感谢。
发布于 2020-09-04 08:55:55
弄清楚每个函数的数据类型。视图函数返回HttpResponse类型的数据。您应该更改数据函数,以便每个函数都返回所需类型的数据,而不是返回HttpResponse。例如,mm函数应该返回内存数据,它在您的模型中是一个CharField (它是文本,限制为200个字符)。确保它返回文本,而不是Python列表,不是json,也不是HttpResponse。
然后调用一个视图函数,该函数将(从所有数据函数中)收集并保存数据,然后返回其HttpResponse。例如:
#Data function. Returns the disk free data itself, not a HttpResponse
def dkf():
url = "http://127.0.0.1:5000/diskfree"
free_disk_data = requests.get(url).json()
#other disk processing to be written by you. dskf is a variable with Character (text) data. How to get it is left to you
return dskf
#Data function. Returns the memory data itself, not a HttpResponse
def mm():
url = "http://127.0.0.1:5000/memory"
memory_data = requests.get(url).json()
#other memory processing to be written by you. mem is a variable with Character (text) data. How to get it is left to you
return mem
#View function. Call in the browser as /insert
def insert(request):
sysMon = Usage
sysMon.memory = mm() #calls mm function which returns memory data
sysMon.freeDisk = dkf() #calls dkf function which returns disk free data
#call the other ones here
sysMon.save()
return HttpResponse("Usage data saved")还要注意,对于数据收集和保存到数据库,您不必使用视图(这需要浏览器和人工来加载页面)。您可以创建一个Python脚本来加载Django模块,并从后端执行数据收集,例如定期从cron (在Linux上)或Windows Task Scheduler调用。
https://stackoverflow.com/questions/63717187
复制相似问题