Jumpserver賬單模塊開發(fā)

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

成都創(chuàng)新互聯(lián)公司專業(yè)提供成都機(jī)柜租用服務(wù),為用戶提供五星數(shù)據(jù)中心、電信、雙線接入解決方案,用戶可自行在線購買成都機(jī)柜租用服務(wù),并享受7*24小時金牌售后服務(wù)。

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) #下載數(shù)據(jù)文件
        print 'over download'
        zipfile.ZipFile(zfile).extractall() #解壓文件
        with codecs.open(file,'r','utf-8') as f:便利csv數(shù)據(jù)文件
            reader = csv.reader(f)
            head_row = next(reader)
                        #過濾無效數(shù)據(jù)并將結(jié)果添加到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的數(shù)據(jù)列表
        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:#循環(huán)賬單列表
        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() #查詢賬單明細(xì)
    aws_account = Aws_account.objects.all() #統(tǒng)計賬戶數(shù)量
    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)

展示頁面靜態(tài)文件內(nèi)容如下:

{% extends 'base.html' %}
{% load mytags %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<style type="text/css">
#定義內(nèi)容展示寬度以及位置
#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' %}#區(qū)分人民幣與美元
                    <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 %}#遍歷結(jié)果并且展示內(nèi)容
                            <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 賬單模塊開發(fā)

分享名稱:Jumpserver賬單模塊開發(fā)
文章地址:http://www.muchs.cn/article30/ihejpo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、定制開發(fā)域名注冊、商城網(wǎng)站、外貿(mào)建站網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司