
    Vh+5                        d dl mZ dZdZd dlZd dlZd dlmZ d dlZd dl	Z	d dl
Z
	 d dlZdZd dlmZ d d	lmZ  G d
 de      Zy# e$ r dZY !w xY w)    )annotationsa  
author: Yevhen Khmelenko (@ujenmr)
name: logstash
type: notification
short_description: Sends events to Logstash
description:
  - This callback will report facts and task events to Logstash U(https://www.elastic.co/products/logstash).
requirements:
  - whitelisting in configuration
  - logstash (Python library)
options:
  server:
    description: Address of the Logstash server.
    type: str
    env:
      - name: LOGSTASH_SERVER
    ini:
      - section: callback_logstash
        key: server
        version_added: 1.0.0
    default: localhost
  port:
    description: Port on which logstash is listening.
    type: int
    env:
      - name: LOGSTASH_PORT
    ini:
      - section: callback_logstash
        key: port
        version_added: 1.0.0
    default: 5000
  type:
    description: Message type.
    type: str
    env:
      - name: LOGSTASH_TYPE
    ini:
      - section: callback_logstash
        key: type
        version_added: 1.0.0
    default: ansible
  pre_command:
    description: Executes command before run and its result is added to the C(ansible_pre_command_output) logstash field.
    type: str
    version_added: 2.0.0
    ini:
      - section: callback_logstash
        key: pre_command
    env:
      - name: LOGSTASH_PRE_COMMAND
  format_version:
    description: Logging format.
    type: str
    version_added: 2.0.0
    ini:
      - section: callback_logstash
        key: format_version
    env:
      - name: LOGSTASH_FORMAT_VERSION
    default: v1
    choices:
      - v1
      - v2
a  
ansible.cfg: |
  # Enable Callback plugin
  [defaults]
      callback_whitelist = community.general.logstash

  [callback_logstash]
      server = logstash.example.com
      port = 5000
      pre_command = git rev-parse HEAD
      type = ansible

11-input-tcp.conf: |-
  # Enable Logstash TCP Input
  input {
          tcp {
              port => 5000
              codec => json
              add_field => { "[@metadata][beat]" => "notify" }
              add_field => { "[@metadata][type]" => "ansible" }
          }
      }
N)contextTF)CallbackBase)nowc                       e Zd ZdZdZdZdZ fdZd Zd fd	Z	d Z
d	 Zd
 Zd Z	 d Zd Zd Zd Zd Zd Zd Z xZS )CallbackModuleg       @notificationzcommunity.general.logstashTc                    t         t        |           t        s"d| _        | j
                  j                  d       t               | _        y )NTzThe required python-logstash/python3-logstash is not installed. pip install python-logstash for Python 2pip install python3-logstash for Python 3)	superr   __init__HAS_LOGSTASHdisabled_displaywarningr   
start_time)self	__class__s    o/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/general/plugins/callback/logstash.pyr   zCallbackModule.__init__}   s>    nd,. DMMM!! #N O %    c                6   | j                   st        j                  d      | _        | j                  j	                  t        j
                         t        j                  | j                  | j                  d| j                        | _        | j                  j                  | j                         t        j                         | _        t!        t#        j$                               | _        d| _        | j&                  | j                  d| _        | j,                  :t/        j0                  | j,                        j3                         | j*                  d<   t4        j6                  t4        j6                  j9                  d      | j*                  d<   t4        j6                  j9                  d	      | j*                  d
<   t4        j6                  j9                  d      | j*                  d<   t4        j6                  j9                  d      | j*                  d<   y y y )Nzpython-logstash-logger   )versionmessage_typer   )sessionhostansible_pre_command_outputcheckansible_checkmodetagsansible_tags	skip_tagsansible_skip_tags	inventory)r   logging	getLoggerloggersetLevelDEBUGlogstashTCPLogstashHandler	ls_serverls_portls_typehandler
addHandlersocketgethostnamehostnamestruuiduuid4r   errors	base_datals_pre_commandospopenreadr   CLIARGSget)r   s    r   _init_pluginzCallbackModule._init_plugin   s|   }}!++,DEDKKK  /#66!\\	DL KK""4<<0"..0DMtzz|,DLDK  <<DN
 "".?Axx''@))- ;< *6=oo6I6I'6R23181D1DV1L~.6=oo6I6I+6V23.5oo.A.A+.N{+	 +3 r   c                @   t         t        |   |||       | j                  d      | _        t        | j                  d            | _        | j                  d      | _        | j                  d      | _        | j                  d      | _	        | j                          y )N)	task_keysvar_optionsdirectserverporttypepre_commandformat_version)r   r   set_options
get_optionr+   intr,   r-   r8   ls_format_versionr>   )r   r@   rA   rB   r   s       r   rH   zCallbackModule.set_options   s    nd/)Q\ek/l24??623v."oom<!%1A!Br   c                   | j                   j                         }d|d<   d|d<   |j                  |d<   | j                  dk(  r"| j                  j                  d|d   |       y | j                  j                  d	|       y )
Nstartansible_typeOKstatusansible_playbookv2zSTART PLAYBOOK | %sextrazansible start)r7   copy
_file_namerK   r&   info)r   playbookdatas      r   v2_playbook_on_startz#CallbackModule.v2_playbook_on_start   s    ~~""$&^X#+#6#6 ""d*KK%t,>'?t   KK_D9r   c                "   t               }|| j                  z
  }i }|j                  j                         D ]  }|j	                  |      ||<    | j
                  dk(  rd}nd}| j                  j                         }d|d<   ||d<   |j                         |d<   t        j                  |      |d<   | j                  d	k(  r2| j                  j                  d
t        j                  |      |       y | j                  j                  d|       y )Nr   rO   FAILEDfinishrN   rP   ansible_playbook_durationansible_resultrR   zFINISH PLAYBOOK | %srS   zansible stats)r   r   	processedkeys	summarizer6   r7   rU   total_secondsjsondumpsrK   r&   rW   )r   statsend_timeruntimesummarize_statr   rP   rY   s           r   v2_playbook_on_statsz#CallbackModule.v2_playbook_on_stats   s    5T__,OO((* 	9D#(??4#8N4 	9 ;;!FF~~""$'^X,3,A,A,C()!%N!;""d*KK&

>(B$   KK_D9r   c                   t        |j                        | _        |j                  r|j                  | _        | j
                  j                         }d|d<   d|d<   | j                  |d<   | j                  |d<   | j                  dk(  r)| j                  j                  d| j                  |	       y | j                  j                  d
|	       y )NrM   rN   rO   rP   ansible_play_idansible_play_namerR   zSTART PLAY | %srS   zansible play)
r3   _uuidplay_idname	play_namer7   rU   rK   r&   rW   )r   playrY   s      r   v2_playbook_on_play_startz(CallbackModule.v2_playbook_on_play_start   s    4::99!YYDN~~""$&^X"&,,$(NN !""d*KK.dKKK^48r   c                8    t        |j                        | _        y )N)r3   rn   task_id)r   taskis_conditionals      r   v2_playbook_on_task_startz(CallbackModule.v2_playbook_on_task_start   s    4::r   c                V   t        |j                        j                  dd      j                  dd      }| j                  j	                         }|dk(  rd|d<   d|d<   |j
                  j                  |d<   | j                  |d	<   | j                  |d
<   ||d<   | j                  |j                        |d<   | j                  dk(  r8| j                  j                  d| j                  |j                        |       y | j                  j                  d|       y d|j                  j                         v r|j                  d   |d<   nd|d<   d|d<   d|d<   |j
                  j                  |d<   | j                  |d	<   | j                  |d
<   ||d<   | j                  |d<   | j                  |j                        |d<   | j                  dk(  r9| j                  j                  d|| j                  |j                        |       y | j                  j                  d|       y )NTASK:  	HANDLER: setuprN   rO   rP   ansible_hostrl   rm   ansible_taskansible_factsrR   zSETUP FACTS | %srS   zansible factschangedansible_changedFrv   ansible_task_idr_   zTASK OK | %s | RESULT | %sz
ansible ok)r3   _taskreplacer7   rU   _hostrp   ro   rq   _dump_results_resultrK   r&   rW   ra   ru   r   resultkwargs	task_namerY   s        r   v2_runner_on_okzCallbackModule.v2_runner_on_ok   s   %--h;CCKQST	~~""$#*D !DN#)<<#4#4D &*llD"#(,D$%#,D $($6$6v~~$FD!&&$.  &(:(:6>>(JRV !     =FNN//11*0..*C&'*/&'#)D !DN#)<<#4#4D &*llD"#(,D$%#,D &*llD"#%)%7%7%GD!"&&$.  0t11&..A ! 
   T :r   c                   t        |j                        j                  dd      j                  dd      }| j                  j	                         }d|d<   d|d<   |j
                  j                  |d<   | j                  |d	<   | j                  |d
<   ||d<   | j                  |d<   | j                  |j                        |d<   | j                  dk(  r| j                  j                  d||       y | j                  j                  d|       y )Nrz   r{   r|   rv   rN   SKIPPEDrP   r~   rl   rm   r   r   r_   rR   zTASK SKIPPED | %srS   zansible skipped)r3   r   r   r7   rU   r   rp   ro   rq   ru   r   r   rK   r&   rW   r   s        r   v2_runner_on_skippedz#CallbackModule.v2_runner_on_skipped  s    %--h;CCKQST	~~""$%^"X%||00^"&,,$(NN !(^"&,,!%!3!3FNN!C""d*KK0)4HKK.d;r   c                Z   | j                   j                         }d|d<   d|d<   |j                  j                  |d<   | j                  |d<   | j
                  |d<   ||d<   | j                  d	k(  r| j                  j                  d
||       y | j                  j                  d|       y )NimportrN   IMPORTEDrP   r~   rl   rm   imported_filerR   zIMPORT | %srS   ansible import	r7   rU   r   rp   ro   rq   rK   r&   rW   )r   r   r   rY   s       r   v2_playbook_on_import_for_hostz-CallbackModule.v2_playbook_on_import_for_host-  s    ~~""$'^#X%||00^"&,,$(NN ! -_""d*KK]MFKK-T:r   c                Z   | j                   j                         }d|d<   d|d<   |j                  j                  |d<   | j                  |d<   | j
                  |d<   ||d<   | j                  d	k(  r| j                  j                  d
||       y | j                  j                  d|       y )Nr   rN   zNOT IMPORTEDrP   r~   rl   rm   r   rR   zNOT IMPORTED | %srS   r   r   )r   r   missing_filerY   s       r   "v2_playbook_on_not_import_for_hostz1CallbackModule.v2_playbook_on_not_import_for_host;  s    ~~""$'^'X%||00^"&,,$(NN ! ,_""d*KK0,dKKK-T:r   c                   t        |j                        j                  dd      j                  dd      }| j                  j	                         }d|j
                  j                         v r|j
                  d   |d<   nd|d<   d|d<   d	|d
<   |j                  j                  |d<   | j                  |d<   | j                  |d<   ||d<   | j                  |d<   | j                  |j
                        |d<   | xj                  dz  c_        | j                  dk(  rD| j                  j!                  d|| j"                  | j                  |j
                        |       y | j                  j!                  d|       y )Nrz   r{   r|   r   r   Frv   rN   r\   rP   r~   rl   rm   r   r   r_   r   rR   z*TASK FAILED | %s | HOST | %s | RESULT | %srS   zansible failed)r3   r   r   r7   rU   r   ra   r   rp   ro   rq   ru   r   r6   rK   r&   errorr2   r   s        r   v2_runner_on_failedz"CallbackModule.v2_runner_on_failedI  sV   %--h;CCKQST	~~""$++--&,nnY&?D"#&+D"#%^!X%||00^"&,,$(NN !(^"&,,!%!3!3FNN!Cq""d*KK<4==""6>>2$   KK.d;r   c                   t        |j                        j                  dd      j                  dd      }| j                  j	                         }d|d<   d|d<   |j
                  j                  |d<   | j                  |d	<   | j                  |d
<   ||d<   | j                  |d<   | j                  |j                        |d<   | xj                  dz  c_        | j                  dk(  rD| j                  j                  d|| j                   | j                  |j                        |       y | j                  j                  d|       y )Nrz   r{   r|   rv   rN   UNREACHABLErP   r~   rl   rm   r   r   r_   r   rR   z*UNREACHABLE | %s | HOST | %s | RESULT | %srS   zansible unreachabler3   r   r   r7   rU   r   rp   ro   rq   ru   r   r   r6   rK   r&   r   r2   r   s        r   v2_runner_on_unreachablez'CallbackModule.v2_runner_on_unreachablee  s"   %--h;CCKQST	~~""$%^&X%||00^"&,,$(NN !(^"&,,!%!3!3FNN!Cq""d*KK<4==""6>>2$   KK34@r   c                   t        |j                        j                  dd      j                  dd      }| j                  j	                         }d|d<   d|d<   |j
                  j                  |d<   | j                  |d	<   | j                  |d
<   ||d<   | j                  |d<   | j                  |j                        |d<   | xj                  dz  c_        | j                  dk(  rD| j                  j                  d|| j                   | j                  |j                        |       y | j                  j                  d|       y )Nrz   r{   r|   rv   rN   r\   rP   r~   rl   rm   r   r   r_   r   rR   z+ASYNC FAILED | %s | HOST | %s | RESULT | %srS   zansible asyncr   r   s        r   v2_runner_on_async_failedz(CallbackModule.v2_runner_on_async_failed|  s!   %--h;CCKQST	~~""$%^!X%||00^"&,,$(NN !(^"&,,!%!3!3FNN!Cq""d*KK=4==""6>>2$   KKoT:r   )NNN)__name__
__module____qualname__CALLBACK_VERSIONCALLBACK_TYPECALLBACK_NAMECALLBACK_NEEDS_WHITELISTr   r>   rH   rZ   rj   rs   rx   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r   v   sh    "M0M#	 O@	::29"'(;T<$;;<8A.;r   r   )
__future__r   DOCUMENTATIONEXAMPLESr9   rd   ansibler   r0   r4   r$   r)   r   ImportErroransible.plugins.callbackr   Cansible_collections.community.general.plugins.module_utils.datetimer   r    r   r   <module>r      sh    #?B0 
     L 2
[;\ [;  Ls   A AA