溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Jumpserver 賬單模塊開發

發布時間:2020-06-23 07:16:12 來源:網絡 閱讀:532 作者:Robert楊 欄目:編程語言

一、由于jumpserver的CMDB系統無法滿足要求,所以另外自行開發模塊統計云賬單的頁面。功能如下:
?
1、實現賬單自動下載
2、分析過濾并且錄入到數據庫中
3、展示頁面
?

jumpserver使用的是django框架,控制器代碼如下:

#coding:utf-8
from django.db.models import Q
from jumpserver.api import *
from jumpserver.models import Setting
from django.http import HttpResponse,StreamingHttpResponse
from django.shortcuts import render,render_to_response
from jcloud.aws_iam_scan import *
from jcloud.aws_service_san import *
from jcloud.forms import Aws_monitor_userForm
from jcloud.models import *
import json
import django.utils.timezone as timezone
import time
from datetime import date, timedelta
import boto3
import zipfile
import zlib
import os
import csv
import codecs
import re
import sys
reload(sys)
sys.setdefaultencoding('utf8')
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from django.template import loader
from pprint import pprint

def bill_download(): #賬單下載

    def bill_detail_indb(file,profile_name,location,account_tag,vol_item,vol_price):#定義下載和入庫
        dictres = {}
        session = boto3.Session(profile_name=profile_name)
        s3 = session.client("s3")#初始化aws s3鏈接
        ttime = (datetime.datetime.now() + datetime.timedelta(days=-4)).strftime('%m')
        file = file + ttime + '.csv'
        zfile = file + '.zip'
        s3.download_file(location, zfile,zfile) #下載數據文件
        print 'over download'
        zipfile.ZipFile(zfile).extractall() #解壓文件
        with codecs.open(file,'r','utf-8') as f:便利csv數據文件
            reader = csv.reader(f)
            head_row = next(reader)
                        #過濾無效數據并將結果添加到dlist列表
            for row in reader:
                if re.match(r'This line contains',row[vol_item]) or re.match(r'Total',row[vol_item]) or re.search(ur"[\u4e00-\u9fa5]+",unicode(row[vol_item], "utf-8")) or not row[vol_item] or not row[vol_price]:
                    continue
                else:
                    tp = float(row[vol_price])
                if row[vol_item] in dictres.keys():
                    dictres[row[vol_item]] = dictres[row[vol_item]] + tp
                else:
                    dictres[row[vol_item]] = tp

        dlist = [] #初始化需要寫入DB的數據列表
        for n in dictres:
            dlist.append(Aws_detail_price(account_tag=account_tag,service_id=str(n),aws_price=("%.2f" % (dictres[n]))))
        res = Aws_detail_price.objects.bulk_create(dlist)

        files = [['644201129899-aws-billing-detailed-line-items-with-resources-and-tags-2017-','adminstrator-tokyo','ptmind-en-bill',1,19,18],
            ['246056064096-aws-billing-detailed-line-items-with-resources-and-tags-ACTS-2017-','ptmind-beijing','ptmind-cn-bill',2,21,20]
    ]

        for item in files:#循環賬單列表
        bill_detail_indb(item[0],item[1],item[2],item[3],item[4],item[5])

def aws_bill(request):
    aws_bill = Aws_bill.objects.all() #查詢賬單明細
    aws_account = Aws_account.objects.all() #統計賬戶數量
    res = []
    for i in aws_account:
        tprice = 0;
        ares2 = []
        ares = []
        for price in aws_bill:
            if int(i.aws_account_id) is int(price.aws_account_id):
                pres = []
                #篩選有價格的
                if float(price.aws_price) > 0:
                    pres.append(price.aws_service)
                    pres.append(price.aws_price)
                    ares.append(pres)
                    tprice = tprice + float(price.aws_price)
        ares2.append(i.aws_account)
        ares2.append(tprice)
        ares2.append(ares)
        res.append(ares2)
    return my_render('jcloud/aws_bill.html', locals(), request)

展示頁面靜態文件內容如下:

{% extends 'base.html' %}
{% load mytags %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<style type="text/css">
#定義內容展示寬度以及位置
#content{
    margin: 20px auto;
    height: 3600px;
    width: 1200px;
}

.tables{
    margin: 20px auto;
}
#定義每個跳的距離和浮動橫列顯示
.t1{
    margin: 0 0 0 100px;
    float: left;
    max-width: 500px;
    display: block;
    background: white;
}

.title_top{
    font-size: 26px;
    text-align: center;
    color: black;
    height: 50px;
    line-height: 50px;
}
.price_bottom{
    margin: 0 auto;
    text-align: right;
    font-size: 20px;
    color: black;
    height: 70px;
    line-height: 70px;
}

.t1 td{
    margin: 20px auto;
    width: 950px;
    font-size: 18px;
    line-height: 30px;
    text-indent: 20px;
}
.t1 td:last-child{
    width: 50px;
    text-align: right;
}
.t1 hr{
    margin: 5px auto;
    border-bottom: 2px solid black !important;
}
</style>

<div id = "content" >
        {% for a in res %}
            <div class="tables">
                {% if a.0 == 'China:ptmind' %}#區分人民幣與美元
                    <table id = {{ a.0 }} class = "t1">
                        <head>
                            <tr>
                                <th colspan="2"><p class="title_top">{{ a.0 }}</p><hr /></th>                            
                            </tr>
                        </head>               
                            {% for b in a.2 %}#遍歷結果并且展示內容
                            <tr>
                               <td>{{ b.0 }}</td>
                               <td>{{ b.1 }}</td>
                            </tr>
                            {% endfor %}
                            <tr>                            
                                <th colspan="2"><hr /><p class="price_bottom">Total Price:¥{{ a.1 }}</p></th>                            
                            </tr>                    
                    </table>
                {% else %}
                    <table id = {{ a.0 }} class = "t1">
                        <head>
                            <tr>
                                <th colspan="2"><p class="title_top">{{ a.0 }}</p><hr /></th>                            
                            </tr>
                        </head>               
                            {% for b in a.2 %}
                            <tr>
                               <td>{{ b.0 }}</td>
                               <td>{{ b.1 }}</td>
                            </tr>
                            {% endfor %}
                            <tr>                            
                                <th colspan="2"><hr /><p class="price_bottom">Total Price:${{ a.1 }}</p></th>                            
                            </tr>                    
                    </table>

                {% endif %}
            </div>
        {% endfor %}
</div>

{% endblock %}

具體頁面展示如下:
Jumpserver 賬單模塊開發

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女