1. import datetime
  2. import os
  3. import time
  4. from ansible.plugins.callback import CallbackBase
  5.  
  6. class CallbackModule(CallbackBase):
  7. """
  8. A plugin for timing tasks
  9. """
  10. def __init__(self):
  11. super(CallbackModule, self).__init__()
  12. self.stats = {}
  13. self.current = None
  14.  
  15. def playbook_on_task_start(self, name, is_conditional):
  16. """
  17. Logs the start of each task
  18. """
  19.  
  20. if os.getenv("ANSIBLE_PROFILE_DISABLE") is not None:
  21. return
  22.  
  23. if self.current is not None:
  24. # Record the running time of the last executed task
  25. self.stats[self.current] = time.time() - self.stats[self.current]
  26.  
  27. # Record the start time of the current task
  28. self.current = name
  29. self.stats[self.current] = time.time()
  30.  
  31. def playbook_on_stats(self, stats):
  32. """
  33. Prints the timings
  34. """
  35.  
  36. if os.getenv("ANSIBLE_PROFILE_DISABLE") is not None:
  37. return
  38.  
  39. # Record the timing of the very last task
  40. if self.current is not None:
  41. self.stats[self.current] = time.time() - self.stats[self.current]
  42.  
  43. # Sort the tasks by their running time
  44. results = sorted(
  45. self.stats.items(),
  46. key=lambda value: value[1],
  47. reverse=True,
  48. )
  49.  
  50. # Just keep the top 10
  51. results = results[:10]
  52.  
  53. # Print the timings
  54. for name, elapsed in results:
  55. print(
  56. "{0:-<70}{1:->9}".format(
  57. '{0} '.format(name),
  58. ' {0:.02f}s'.format(elapsed),
  59. )
  60. )
  61.  
  62. total_seconds = sum([x[1] for x in self.stats.items()])
  63. print("\nPlaybook finished: {0}, {1} total tasks. {2} elapsed. \n".format(
  64. time.asctime(),
  65. len(self.stats.items()),
  66. datetime.timedelta(seconds=(int(total_seconds)))
  67. )
  68. )

下面是把这个插件集成到ansible的方法:

  1. cd /etc/ansible
  2. mkdir callback_plugins
  3. cd callback_plugins
  4. wget https://raw.githubusercontent.com/jlafon/ansible-profile/master/callback_plugins/profile_tasks.py
  5. ###友提
  6. ansible2.0以上的版本需要在ansible.cfg中加入
  7. callback_whitelist = profile_tasks

运行结果如下:

ansible执行playbook时间显示的python脚本的更多相关文章

  1. ansible批量分发免密钥登陆python脚本

    最近看了看强大的号称自动化运维的三大利器之一的--ansible,ok,亲测之后,确实感觉,对于我们这种DBA工作者来说,确实很受益. 值得注意的是ansible要求被管理服务器python版本不低于 ...

  2. 开启SQL Server执行占用时间显示和逻辑读取次数显示

    两条命令 1:set statistics time on 这条命令会显示你编译这条语句和执行这条语句花多长时间 2.set statistics io on 这条命令会显示你逻辑读取了多少次数据库和 ...

  3. ansible执行带有环境变量的脚本不生效

    1背景 jenkins发布时,使用ansible执行远程主机上的启动tomcat脚本发现不生效,启动tomcat的脚本中有环境变量. ansible主机为:172.16.35.8 tomcat服务器为 ...

  4. Android上执行python脚本-QPython

    看书,发现android可以跑python. 尝试了一下. 首先需要在手机上安装python环境,通过安装apk实现,这个apk叫QPython,还有同类的比如SL4A. QPython的官网:htt ...

  5. Python与Hack之window下运行带参数的Python脚本,实现一个简单的端口扫描器

    1.前提是:windows已经配置好Python的环境变量: 2.进入cmd命令行模式: **输入python命令,检测是否环境配置好:显示这样说明配置环境变量没问题 **用cd命令进入Python脚 ...

  6. C#调用python脚本

    因项目需要,需要使用C#控制台程序执行python脚本,查询各种资料后可以成功调用了,记录一下,以备后面遗忘. 只尝试了两种调用方式,第一种只适用于python脚本中不包含第三方模块的情况,第二种针对 ...

  7. Linux使用crontab定时执行Python脚本清理日志

    Linux中,周期执行的任务一般由crond这个守护进程来处理.cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.crond的配置文件称为"crontab", ...

  8. Jenkins自动执行python脚本输出测试报告

    前言 在用python做自动化测试时,我们写好代码,然后需要执行才能得到测试报告,这时我们可以通过 Jenkins 来进一步完成自动化工作. 借助Jenkins,我们可以结合 Git/SVN 自动拉取 ...

  9. 【原创】控制perl和python脚本执行过程中脚本文件是否关闭的方法

    引子 跟踪perl和python脚本对文件的访问,实际过程中,perl和python解析器在解析完脚本后,直接关闭了 脚本文件,在进程中查询不到是访问文件的脚本文件名称. shell.perl和pyt ...

随机推荐

  1. 手把手windows64位配置安装python2.7

    这几天公司要用到python的一些算法,让我调研一番,之前对Python一次没接触的我在安装配置环境的时候由于版本的问题,折腾了好久,这里简单介绍一下我的安装方法,需要安装pyhton的朋友可以不再向 ...

  2. ActiveMQ_点对点队列(二)

      一.本文章包含的内容 1.列举了ActiveMQ中通过Queue方式发送.消费队列的代码(普通文本.json/xml字符串.对象数据) 2.spring+activemq方式   二.配置信息 1 ...

  3. Notes on 'Efficient Graph-Based Image Segmentation'

    Notes on Efficient Graph-Based Image Segmentation 算法的目标 按照一种确定的标准, 将图片分割成细粒度的语义区域, 即Super pixel. 算法步 ...

  4. json-jsonConfig使用

    一,setCycleDetectionStrategy 防止自包含 /** * 这里测试如果含有自包含的时候需要CycleDetectionStrategy */ public static void ...

  5. jQuery中data()方法用法实例

    语法结构一: 复制代码代码如下: $(selector).data(name,value) 参数列表: 参数 描述 name 存储的数据名称. value 将要存储的任意数据. 实例代码: 复制代码代 ...

  6. wamp服务下部署禅道或其它项目时访问缓慢的解决办法

    原因其实很简单: WAMP服务默认是不支持外网访问的,如果公司内外网在一起就会引起缓慢甚至超时的问题,直接修改WAPM的配置文件让它可以访问外网即可解决问题.   解决的方法/步骤   1.解决办法: ...

  7. Webpack打包工具实时更新操作(启用观察者模式)

    可能存在这样的问题,每次修改完js/css文件之后,都要进行手动打包一下,浏览器上刷新一下. 那么我一般这样做: 1.安装Hbuilder,并启用边编辑边看的模式(其实这个是默认的). 2.启动Web ...

  8. 快递查询SDK

    简介: 快递查询的SDK,使用的是快递100的智能查询,此SDK只是中间包装了一层而已,单对于普通的快递业务查询已经足够,也省去开发者研究的时间,拿来即用. 用途: 1.对接微信公众平台 2.对接需要 ...

  9. 认识http协议

    http:Hyper Text Transfer Protocol,超文本传输协议.是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和 ...

  10. struts2 Advanced Learning

    catalog . 引言 . struts2的类型转换 . struts2的输入校验 . struts2的拦截器机制 . 使用struts2的Ajax支持 . struts2 OGNL表达式 . st ...