运维自动化--cvs转换成xls,并且邮件发送给相关人员

线上通过执行脚本,生成cvs文件,但是相关人员希望能够以特定格式的xls统计给他们,根据cvs的方法名查找字典xls去对应相关的中文名称,并且添加一行进去。在这个背景下,写了这个自动化的脚本。crontab定期去执行这个脚本。

主要代码如下:

定义一个发送email的模块:

#!/usr/local/howbuy/virtualenv/bin/python
#coding:utf-8
from email.mime.text import MIMEText
import smtplib
import sys
default_encoding = ‘utf-8‘
if sys.getdefaultencoding() != default_encoding:

    reload(sys)

    sys.setdefaultencoding(default_encoding)
import os
import logging
import smtplib
from email.mime.text import MIMEText
import email.mime.multipart
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email import Encoders

#logpath=‘/data/logs/smslog/‘
#logname=os.path.basename(os.path.realpath(__file__))
#logger = logging.getLogger()
#logging.basicConfig(filename =logpath+logname+‘.log‘,level = logging.INFO, format = ‘%(asctime)s - %(levelname)s: %(message)s‘)

smtpserver = ‘c1.icoremail.net‘
username = ‘[email protected]‘
password = ‘Howbuy.com_IT_sa_ops_2014‘

def send_mail(to_list,subject,content):
    msg=MIMEMultipart()
    msg=MIMEMultipart()
    me=‘[email protected]‘
    body = MIMEText(‘性能日志统计‘,‘plain‘,‘utf-8‘)
    msg.attach(body)
    msg["Accept-Language"]="zh-CN"
    msg["Accept-Charset"]="ISO-8859-1,utf-8"
    msg[‘Subject‘] = subject
#    msg[‘From‘] = me
    msg[‘From‘] = username
    msg[‘to‘] = to_list
    part = MIMEBase(‘application‘, ‘octet-stream‘)
    part.set_payload(open(content,‘r‘).read())
    Encoders.encode_base64(part)
    part.add_header(‘Content-Disposition‘, ‘attachment‘,filename=‘performance.xls‘)
    msg.attach(part)

    try:
#        s = smtplib.SMTP(‘127.0.0.1‘)
        s = smtplib.SMTP(smtpserver)
        s.login(username,password)
#        s.sendmail(me,to_list,msg.as_string())
        s.sendmail(username,to_list,msg.as_string())
        s.close()
        print ‘success!‘
#        logging.info(‘%s,%s,%s‘ %(to_list,subject,content))
        return True
    except Exception,e:
        print str(e)
#        logging.error(‘[%s] %s,%s,%s‘ %(e,to_list,subject,content))
        return False

 
if __name__ == "__main__":
    send_mail(sys.argv[1], sys.argv[2], sys.argv[3])

调用生成xls主程序:

#/usr/bin/env python
#-*- coding: UTF-8 -*-
import sys
from pmail import *
default_encoding = ‘utf-8‘
if sys.getdefaultencoding() != default_encoding:
    
    reload(sys)
    
    sys.setdefaultencoding(default_encoding)
import os
import xlwt
import xlrd
import datetime
import time
eday=datetime.datetime.now().strftime("%Y%m%d")
h=[‘任务‘,‘日期‘,‘调用方法‘,‘执行总次数‘,‘执行成功次数‘,‘执行异常次数‘,‘单次执行最小耗时(分)‘,‘单次执行最大耗时(分)‘,‘单次执行平均耗时(分)‘,‘执行总耗时(分)‘,‘业务数据笔数‘,‘业务数据处理速度(毫秒/笔)‘]
class dd:
    def __init__(self,zdpath):
        
        self.data= xlrd.open_workbook(zdpath)
        self.path=os.path.dirname(zdpath)
        self.table = self.data.sheet_by_index(0)
        self.nrows = self.table.nrows
        self.day=eday
        self.data = xlwt.Workbook(encoding = ‘utf-8‘)

    def task(self,path,name):
        file=open(path,‘r‘)
        table = self.data.add_sheet(name)
        for yy in range(12):
             table.write(0,yy,h[yy])
            
        filelist=file.readlines()
        rows=len(filelist)
        f=iter(filelist)
        next(f)
        for x in xrange(1,rows):
            bbb=0
            rowlist=next(f).strip().split("|")
            rowmethod=str(rowlist[1].strip())
            for i in xrange(self.nrows):
                zd=self.table.row_values(i)
                zdmethod=str(zd[0].strip())
                if rowmethod==zdmethod:
                    name=str(zd[1].strip())
                    rowlist.insert(0,name)
                    for ii in range(10):
                        table.write(x,ii,rowlist[ii])
                        bbb=1
                    continue
            if not bbb:
                
                rowlist.insert(0,"")
                for ii in range(10):
                    table.write(x,ii,rowlist[ii])
                        
    def sa(self):
        self.data.save(os.path.join(self.path,‘performance-‘+str(self.day)+‘.xls‘).decode(‘utf-8‘))

if __name__==‘__main__‘:
    os.popen(‘sh /data/app/fds-schedule-new/bin/performance/ScheduleTaskPerformanceAnalyzer.sh‘)
    os.popen(‘sh /data/logs/tomcat-console/batch/perfomance/BatchTaskPerformanceAnalyzer.sh‘)
    time.sleep(20)
    a=dd(r‘/data/logs/performance/zd.xlsx‘)
    epath=‘/data/logs/performance‘
    a.task(r‘/data/logs/tomcat-console/batch/perfomance/BatchTaskPerformanceReport.csv‘,‘控台任务‘)
    a.task(r‘/data/app/fds-schedule-new/bin/performance/ScheduleTaskPerformanceReport.csv‘,‘定时任务‘)
    a.sa()
    time.sleep(40)
    p=‘性能日志统计-‘+str(eday)
    send_mail(‘[email protected]‘,p,os.path.join(epath,‘performance-‘+str(eday)+‘.xls‘).decode(‘utf-8‘))#修改邮箱

字典模板:

cvs文件

xls:

时间: 2024-10-08 06:08:04

运维自动化--cvs转换成xls,并且邮件发送给相关人员的相关文章

浅谈运维自动化的那些事儿

前言 运维管理兜兜转转十几余载,大家的运维管理再也不是小米加×××.人工费力拉线扛服务器的传统时代,如你所知,这些年大家张口闭口谈的都是运维自动化如何如何.一千个读者就有一千个哈姆雷特,一千个运维就有一千种运维自动化想法或构建思路,小生不才,今日斗胆来聊聊我眼中"运维自动化"的那些事儿!如有不妥,还请大家给出相应的意见...... 运维自动化到底干个啥? 据度娘之意,IT运维自动化是将日常IT运维中大量的重复性工作,小到简单的日常检查.配置变更和软件安装,大到整个变更流程的组织调度等,

第19章,运维自动化之系统安装

更多内容请点击: Linux学习从入门到打死也不放弃,完全笔记整理(持续更新,求收藏,求点赞~~~~) http://blog.51cto.com/13683480/2095439 本章内容: 系统安装过程 配置anaconda 自动化安装系统 制作引导光盘和U盘 DHCP服务 PXE安装系统 cobbler企业级应用 运维自动化发展历程及技术应用: 全人工阶段----> 工具化阶段----> 平台化阶段----> 自驱动阶段 无流程规范----> 制定规范----> 完善规

运维自动化工具Cobbler之——安装实践

运维自动化工具--Cobbler实践 第1章 About Cobbler 1.1 Cobbler Introduction Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等. Cobbler可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler-web),还提供了API接口,可以方便二次开发使用.Cobbler是较早前的kickstart的升级版,优点是比较容易配置,还自带web

运维自动化之使用Cobbler自动化部署Linux操作系统

1.Cobbler是什么? Cobbler是一个Linux安装服务器,能够快速设置好网络安装环境.它实现了许多与Linux相关的任务的自动化和组合,因此你在部署新的(操作)系统或更改已经存在的操作系统时不需要在繁多的命令和应用程序之间来回切换.Cobbler能帮助(用户.管理者)置备和管理DNS.DHCP.软件包更新.电源管理.配置管理以及更多. "Cobbler is a Linux installation server that allows for rapid setup of netw

18页PPT带你深度解读运维自动化【转】

来自地址:[http://www.opsers.org/tech/18-pages-ppt-show-you-depth-interpretation-operations-automation.html] 说实话,一个运维团队的运维能力如何,其实看一个自动化管理系统便知! ********文章较长,索引目录如下******* 一.概述 二.运维自动化的三重境界 三.运维自动化的多维解读 ******第一.基于应用变更场景的维度划分 ******第二.基于系统层次的维度划分 ******第三.基

运维自动化之puppet3分钟入门

运维自动化之puppet3分钟入门 几个月前曾因为项目需求而学了点puppet的一些知识,最近因为要给别人讲一下,也就借此博文来做一下回忆,当然了,这个puppet用起来还是很不错的,尤其对我这种懒人来说,如果你需要给多台机器安装同一款软件或是同几款软件,那么学习这个能让你事半功倍,接下来开始学习puppet.那么问题来了: 什么是puppet 本着外事问谷歌,内事问百度的原则,我在百度百科里找到了对其的定义:puppet是一种Linux.Unix.windows平台的集中配置管理系统,使用自有

实战:基于Python构建运维自动化平台

导语: 今天与大家一起探讨如何基于Python构建一个可扩展的运维自动化平台,也希望能与大家一起交流,共同成长. 此次分享将通过介绍OMServer.OManager具备的功能.架构设计.模块定制.安全审计.C/S结构的实现等几个方面的内容来展开. 为什么选择Python? 默认安装且跨平台 可读性好且开发效率高 丰富的第三方库(开发框架.各类API.科学计算.GUI等) 社区活跃&众多开发者. Python在腾讯的现状,根据去年内部提交组件语言统计,除去2.3.4前端技术,Python在高级编

运维自动化之Cobbler系统安装详解

原文链接 参考文档 参考文档SA们现在都知道运维自动化的重要性,尤其是对于在服务器数量按几百台.几千台增加的公司而言,单单是装系统,如果不通过自动化来完成,根本是不可想象的. 运维自动化安装方面,早期一般使用人工配置pxe+dhcp+tftp配合kickstart,现在开源工具就多了,如cobbler,OpenQRM和Spacewalk.本文重点介绍Cobbler. Cobbler介绍 Cobbler是一个快速网络安装linux的服务,而且在经过调整也可以支持网络安装windows.该工具使用p

如何基于Python构建一个可扩展的运维自动化平台

嘉宾简介 刘天斯 从事互联网运维工作已13年,目前就职于腾讯-互动娱乐部,负责游戏大数据的运营,曾就职于天涯社区,担任首席架构师/系统管理员. 热衷开源技术的研究,包括系统架构.运维开发.负载均衡.缓存技术.数据库.NOSQL.分布式存储.消息中间件.大数据及云计算.Mesos.Docker.DevOps等领域.擅长大规模集群的运维工作,尤其在自动化运维方面有着非常丰富的经验.同时热衷于互联网前沿技术的研究,活跃在国内社区.业界技术大会,充当一名开源技术的传播与分享者. 导言 受 Reboot