a
    ’þaÒ%  ã                   @   sB   d dl Z d dlZd dlZd dlmZ ddlmZ G dd„ dƒZdS )é    N)ÚTelneté   )Úmessagesc                   @   s  e Zd ZdZddœdd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zd>e	e
dœdd„Ze
dœdd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zee
d%œd&d'„Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Zd2d3„ Zd4d5„ Zd6d7„ Zd?e
d9œd:d;„Zd<d=„ Z dS )@ÚMapperzN Always assume a function leaves the dorado telnet client at
        a prompt.N)Úreturnc                 C   s"   || _ d | _d| _d| _d| _d S )Ns   dorado1é
   F)ÚhostÚtnÚuserpassÚtimeoutÚ	logged_in)Úselfr   © r   ú6C:\dorado\Software\CheckList\mapper_checkout\mapper.pyÚ__init__   s
    zMapper.__init__c              
   C   sR   z|   ¡  W n: tyF } z"td|› ƒ d| _W Y d }~d S d }~0 0 d| _| S )NzLogin failure: FT)ÚloginÚ	ExceptionÚprintr   )r   Úerrr   r   r   Ú	__enter__   s    zMapper.__enter__c                 C   s   | j r|  ¡  d S )N)r   Úlogout)r   ÚtypeÚvalueÚtbr   r   r   Ú__exit__   s    zMapper.__exit__c                 C   s   | j  d¡ d S )Nó   )r	   Úwrite©r   r   r   r   Ú
send_break!   s    zMapper.send_breakc                 C   s   | j  d| j¡S )Ns   ~$ )r	   Ú
read_untilr   r   r   r   r   Úwait_for_prompt$   s    zMapper.wait_for_promptÚMVC)ÚresponseÚtestc                 C   s   t d|› d| d¡ ƒ d S )Nú[z]	Úascii)r   Údecode)r   r"   r#   r   r   r   Úprint_response'   s    zMapper.print_response)Úinfoc                 C   s   t d| ¡ › ƒ d S )Nz
			[INFO]	)r   Úupper)r   r(   r   r   r   Ú
print_info*   s    zMapper.print_infoc                 C   s€   t | jdd| _| j d| j¡ | j | jd ¡ | j d| j¡ | j | jd ¡ |  ¡  |  d| j› d| j 	d¡› ¡ d	S )
z login to the target machine r   )r   s   login:ó   
s	   password:zLogged into z as r%   N)
r   r   r	   r   r   r   r
   r    r*   r&   r   r   r   r   r   -   s    zMapper.loginc                 C   sJ   | j  d¡ |  ¡  |  d| j› ¡ | j  d¡ | j  ¡  | j  ¡  dS )z) Logout of session and close the socket. r   zLogging out from s   exit
N)r	   r   r    r*   r   Zread_allÚcloser   r   r   r   r   ;   s    
zMapper.logoutc                 C   s:   |   d¡ | j d¡ |  ¡  d¡d }|  |d¡ |gS )z Check and read the date zChecking Dates   date
r+   r   ZDATE)r*   r	   r   r    Úsplitr'   )r   Z	date_respr   r   r   Ú
check_dateF   s
    
zMapper.check_datec                 C   sJ   |   d¡ | j d¡ |  ¡ }| d¡}|t|ƒd  }|  |d¡ |gS )z* tail the last message in the xntp server zChecking NTPs   tail /tmp/xntpd.log
r+   é   ZNTP)r*   r	   r   r    r-   Úlenr'   )r   ÚrespZ	last_liner   r   r   Ú	check_ntpN   s    

zMapper.check_ntpc                 C   sª   | j  d¡ | j  d| j¡ | j  d¡ d}|  d|› d¡ t |¡ | j  d¡ |  ¡  d¡}g }t	j
D ]"}|  ||¡}|d	krl| |¡ ql|D ]}|  |d
¡ q”|S )z% run fanTest and parse humidity/temp s	   fanTest
s   fanTest>s   r
é   zfan card test, sleeping for ú seconds...s   q
q
r+   NZFAN)r	   r   r   r   r*   ÚtimeÚsleepr    r-   r   ÚfanÚsearch_byte_responseÚappendr'   ©r   Úsleep_periodr1   Ú	last_respÚitemÚliner   r   r   Úcheck_fan_cardX   s    

zMapper.check_fan_cardc                 C   s–   | j  d¡ d}|  d|› d¡ t |¡ | j  d¡ |  ¡  d¡}g }tj 	¡ D ]&\}}|  
||¡}|dkrT| |¡ qT|D ]}|  |d¡ q€|S )	zO run check_kearfott and parse ins & gps positions, mode,
            & monitor s   check-kearfott
r   zkearfott test, sleeping for r4   r   r+   NZINS)r	   r   r*   r5   r6   r    r-   r   ÚkearfottÚitemsr8   r9   r'   ©r   r;   r1   r<   Úkeyr=   r>   r   r   r   Úcheck_kearfotto   s    
zMapper.check_kearfottc                 C   sl   | j  d¡ d}|  d|› d¡ t |¡ | j  d¡ |  ¡  d¡}|  |d¡}|dkrf|  |d	¡ |gS )
z# run td parosci and parse pressure s   td parosci
é   zparosci test, sleeping for r4   r   r+   z^Depth:NZPARO)	r	   r   r*   r5   r6   r    r-   r8   r'   )r   r;   r1   r>   r   r   r   Úcheck_parosciƒ   s    
zMapper.check_paroscic                 C   sŽ   | j  d¡ d}|  d|› d¡ t |¡ | j  d¡ |  ¡  d¡}g }tjD ]"}|  	||¡}|dkrP| 
|¡ qP|D ]}|  |d¡ qx|S )	z# run td fastcat and parse messages s   td fastcat
é   zfastcat test, sleeping for r4   r   r+   NZCTD)r	   r   r*   r5   r6   r    r-   r   Zfastcat_ctdr8   r9   r'   r:   r   r   r   Úcheck_fastcat   s    

zMapper.check_fastcat)r1   Úregc                 C   s<   |  ¡ }| ¡  |D ]"}t || d¡¡dur|  S qdS )z5 search backwards in a byte response (already split) r%   N)ÚcopyÚreverseÚreÚsearchr&   )r   r1   rI   Zrevr>   r   r   r   r8   £   s    
zMapper.search_byte_responsec                 C   sü   | j  d¡ |  d¡ t d¡ | j  ¡ }tdƒD ]}| j  d¡ t d¡ q2| j  d| j¡}|dkr|  d	¡ |  	¡  |  
¡  |  d
d¡ dS | j  d¡ t d¡ | j  d¡ t d¡ | j  d| j¡ d¡}|D ]}|  |d¡ qÖ|  	¡  |  
¡  |S )z0 run a check_modem and issue the +++, ATS?, ATO s   check-acomms
z0Checking benthos modem, ensure magnet removed...r   é   ó   +gš™™™™™©?ó   >ó    z+No response from modem, check the magnet...s   ERROR NO RESPONSEZACOMMNs   ATS?
r/   s   ATO
ç      à?s   MGPr+   )r	   r   r*   r5   r6   Z	read_someÚranger   r   Ú
exit_qtalkr    r'   r-   )r   r1   Úir>   r   r   r   Úcheck_benthos_modem¬   s0    





zMapper.check_benthos_modemc                 C   s0   t  d¡ | j d¡ t  d¡ | j d¡ d S )Nçš™™™™™¹?ó   ó   q)r5   r6   r	   r   r   r   r   r   rT   È   s    

zMapper.exit_qtalkc                 C   sj   |   d¡ | j d¡ t d¡ | j d¡ t d¡ |  ¡  |  ¡  d¡}|  |d¡}|  	|d¡ |gS )z% run a check_avtrak and issue the CS zChecking Avtrak Beacon...s   check-avtrak
rR   s   CS
r+   z^>CS:ZUSBL)
r*   r	   r   r5   r6   rT   r    r-   r8   r'   ©r   r1   r   r   r   Úcheck_beaconÎ   s    


zMapper.check_beaconc                 C   s   dS )z! just ping the reson on platform Nr   r   r   r   r   Úcheck_reson_pingÛ   s    zMapper.check_reson_pingc                 C   s   dS )z$ just ping the edgetech on platform Nr   r   r   r   r   Úcheck_edgetech_pingà   s    zMapper.check_edgetech_pingc                 C   sr   |   d¡ | j d¡ t d¡ | j d¡ t d¡ | j d¡ |  ¡  d¡}|t|ƒd  }|  |d	¡ |gS )
z' telnet to the svp port on the battery zchecking SVP...s   check-svp
r   ó   ~rW   s   quit
r+   é   ZSVP)	r*   r	   r   r5   r6   r    r-   r0   r'   rZ   r   r   r   Ú	check_svpä   s    


zMapper.check_svpc                 C   s   | j ddS )z) telnet to the battery and issue a STATS Úaft©Úposition©Úcheck_batteryr   r   r   r   Úcheck_aft_batteryñ   s    zMapper.check_aft_batteryc                 C   s   | j ddS )ú- telnet to the fwd battery and issue a STATS Úfwdrb   rd   r   r   r   r   Úcheck_fwd_batteryõ   s    zMapper.check_fwd_batteryra   rb   c              	   C   sô   zØzº|dkr| j  d¡ n*|dkr0| j  d¡ nW W | j  d¡ dS |  |› d¡ | j  d| j¡ t d	¡ | j  d
¡ t d	¡ | j  d| j¡ d¡}|D ]}|  || 	¡ › d¡ qžW n   Y n0 W | j  d¡ n| j  d¡ 0 |  
¡  |S )rg   ra   s   check-aft-battery
rh   s   check-fwd-battery
s   exit
Nz battery test...s   battery>rW   s   STATS
r+   ZBT)r	   r   r*   r   r   r5   r6   r-   r'   r)   r    )r   rc   r1   r>   r   r   r   re   ù   s(    ò

zMapper.check_batteryc                 C   s–   | j  d¡ d}|  d|› d¡ t |¡ | j  d¡ |  ¡  d¡}g }tj 	¡ D ]&\}}|  
||¡}|dkrT| |¡ qT|D ]}|  |d¡ q€|S )	z" run td gps and return the stream s   td gps
rG   zgps test, sleeping for r4   r   r+   NZGPS)r	   r   r*   r5   r6   r    r-   r   ÚgpsrA   r8   r9   r'   rB   r   r   r   Ú	check_gps  s    
zMapper.check_gps)r!   )ra   )!Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r    ÚbytesÚstrr'   r*   r   r   r.   r2   r?   rD   rF   rH   Úlistr8   rV   rT   r[   r\   r]   r`   rf   ri   re   rk   r   r   r   r   r      s6   
	r   )Úsysr5   rL   Z	telnetlibr   Ú r   r   r   r   r   r   Ú<module>   s
   