a ����á·´g„&��ã�������������������@���s˜���d�dl�Z�d�dlZd�dlmZ�d�dlmZ�d�dlmZ�d�dlm Z �d�dl mZ�d�dlm Z �d�dlZd�dlZd�dlZd�dlmZ�d d „�ZG�dd„�deƒZdS�) é����N)ÚConfig)Úget_pennseive_download_metrics)Úcreate_html_template)ÚEmailSender)ÚMonthlyStatsTable)Ú itemgetter)Ú relativedeltac�����������������C���s<���dd„�|�D�ƒ}t�|ƒ}dd„�|D�ƒ}t|tddƒdd}|S�)Nc�����������������S���s���g�|�]}t� |¡‘qS�©�)ÚjsonÚdumps©Ú.0Údr ���r ���ú@/home/cmiss/Jenkins/workspace/SPARC-API/scripts/monthly_stats.pyÚ <listcomp>���ó����z%remove_duplicates.<locals>.<listcomp>c�����������������S���s���g�|�]}t� |¡‘qS�r ���)r ���Úloadsr���r ���r ���r���r������r���Ú datasetIdÚversionT)ÚkeyÚreverse)ÚsetÚsortedr���)Zd_arrayZ json_listZjson_setZunique_listr ���r ���r���Úremove_duplicates���s ����r���c�������������������@���s€���e�Zd�Zd!dd„Zd"dd„Zd d „�Zdd„�Zd d„�Zdd„�Zdd„�Z dd„�Z dd„�Zdd„�Zdd„�Z dd„�Zdd„�Zdd „�ZdS�)#ÚMonthlyStatsFÚ�c�����������������C���s†���t�ƒ�|�_i�|�_tj|�_d|�_tj ¡�|�_ d|�_ ||�_||�_|rF||�_ ntj|�_ tjd�ur‚zttjƒ|�_W�n�ty€���d�|�_Y�n0�d�S�)Nr���é���)r���Ú send_gridÚ user_statsr���ÚPENNSIEVE_ORGANIZATIONÚorganizationÚ_pennsieve_temp_api_keyÚdatetimeÚnowÚ created_atZrun_dayÚdebug_emailÚ debug_modeÚlogging_addressÚMETRICS_EMAIL_ADDRESSÚDATABASE_URLr���ÚmonthlytableÚAttributeError)Úselfr&���r%���r ���r ���r���Ú__init__���s ���� zMonthlyStats.__init__NTc�����������������C���sJ���|d�u�rt�j� ¡� ¡�}|�jrF|�j |¡rF|� ¡�}|�j ||�j|¡�|S�g�S�©N)r"���r#���Údater*���ZsendingRequiredÚrunÚ pushStater���)r,���ZtimeNowÚcommitÚsendgrid_responsesr ���r ���r���Úmonthly_stats_required_check+���s����z)MonthlyStats.monthly_stats_required_checkc�������������� ������sŒ���g�}zˆ� �¡��ˆ� ˆ�j¡}W�nD�ty`�}�z,t d|›�¡�ˆ� d|›�¡�W�Y�d�}~n0d�}~0�0�ˆ� d‡�fdd„ˆ�jD�ƒ›�d|›�¡�|S�)Nz'Hit error while running monthly stats. z*Monthly stats sent successfully Sent to: c��������������������s,���g�|�]$}d�ˆ�j�|� ¡�v�rˆ�j�|�d��‘qS�)Úemail)r���Úkeys)r ���Úorcid_id©r,���r ���r���r���A���r���z$MonthlyStats.run.<locals>.<listcomp>z Send grid Responses: )Ú get_statsÚ send_statsr���Ú BaseExceptionÚloggingÚ exceptionÚsend_logging_email)r,���r3���Úerrorr ���r8���r���r0���7���s����&ÿþzMonthlyStats.runc�����������������C���sB���|� �¡�|�_|� ¡�}|� |¡}|� ||¡|�_|� ¡�|�_|� ¡��|�jS�r.���) Úpennsieve_loginr!���Úget_download_metrics_one_monthÚ"get_dataset_details_from_pennsieveÚcreate_user_download_objectr���Ú&get_emails_orcid_id_map_from_pennsieveÚpennsieve_user_detailsÚ!user_stats_object_post_processing)r,���ÚmetricsZ'dataset_details_for_downloaded_datasetsr ���r ���r���r9���E���s���� zMonthlyStats.get_statsc�����������������C���sx���g�}d}d}|D�]P}d||� �¡�v�r||�d�}tt||�d�ƒƒ}|�js|� ||¡}| |¡�q|�jrt|� |¡g}|S�)Nr���r5���Údatasets)r6���r���r���r&���Ú send_emailÚappendr>���)r,���r���Ú responsesÚ email_addressÚ email_bodyr7���Úrr ���r ���r���r:���N���s����zMonthlyStats.send_statsc�����������������C���s���t�tddƒS�)Nr���)Úmonths)r���r���r8���r ���r ���r���rA���^���s����z+MonthlyStats.get_download_metrics_one_monthc�����������������C���sr���t� tj›�d¡}| ¡��| ¡�d�d�}| ¡�d�}tjd|ddd}|jdtj tj d œ|d }|d�d�}|S�) Nz/authentication/cognito-configZ tokenPoolZappClientIdÚregionzcognito-idpr���)Úregion_nameÚaws_access_key_idÚaws_secret_access_keyZUSER_PASSWORD_AUTH)ÚUSERNAMEZPASSWORD)ZAuthFlowZAuthParametersZClientIdZAuthenticationResultZAccessToken)ÚrequestsÚgetr���ÚPENNSIEVE_API_HOSTÚraise_for_statusr ���Úboto3ÚclientZ initiate_authÚPENNSIEVE_API_TOKENÚPENNSIEVE_API_SECRET)r,���rN���Zcognito_app_client_idZcognito_regionZcognito_idp_clientZlogin_responseÚapi_keyr ���r ���r���r@���b���s"����üýzMonthlyStats.pennsieve_loginc�����������������C���s:���t�jtj›�d|�j›�ddd|�j›�id}| ¡��| ¡�S�)Nz/organizations/z/membersÚ AuthorizationzBearer )Úheaders)rU���rV���r���rW���r ���r!���rX���r ���)r,���rN���r ���r ���r���rD���z���s ����ÿz3MonthlyStats.get_emails_orcid_id_map_from_pennsievec�����������������C���s`���|�j�D�]T}d| ¡�v�r|d�d�}||�j ¡�v�r|d�|�j|�d<�|�j|�d�|�j|�d<�qd�S�)NÚorcidr5���rH���)rE���r6���r���)r,���Úuserr7���r ���r ���r���rF���‚���s���� z.MonthlyStats.user_stats_object_post_processingc�����������������C���s@���t�dd„�|D�ƒƒ}t tj›�dd|dœ¡}| ¡��| ¡�d�S�)Nc�����������������S���s���g�|�]}|d��‘qS�)r���r ���r���r ���r ���r���r������r���zCMonthlyStats.get_dataset_details_from_pennsieve.<locals>.<listcomp>z/discover/datasetsiè��)ÚlimitÚidsrH���)r���rU���rV���r���rW���rX���r ���)r,���rG���Z uniqueIdsrN���r ���r ���r���rB���‹���s����þz/MonthlyStats.get_dataset_details_from_pennsievec��������������������sŠ���i�}|D�]|‰�‡�fdd„|D�ƒ}|� �ˆ�|¡}ˆ�d�D�]P}|d�}|d�ur2|| ¡�vrhi�||<�|||�d<�q2| |¡d�|�||�d<�q2q|S�)Nc��������������������s ���g�|�]}ˆ�d��|d�kr|‘qS�)Úidr���r ���r���©Údatasetr ���r���r���›���r���z<MonthlyStats.create_user_download_object.<locals>.<listcomp>Zcontributorsr`���rH���)Ú!add_dataset_name_to_download_infor6���rV���)r,���Zdataset_details_objectZdownload_statsÚusersÚdownloadInfoZcontributorr7���r ���re���r���rC���–���s����z(MonthlyStats.create_user_download_objectc�����������������C���s(���t�dt|ƒƒD�]}|d�||�d<�q|S�)Nr���Úname)ÚrangeÚlen)r,���rf���ri���Úir ���r ���r���rg���¬���s����z.MonthlyStats.add_dataset_name_to_download_infoc�����������������C���sF���|�j�r |�j}|�j tj|d|¡S�tjdkrB|}|�j tj|d|¡S�d�S�)Nú&SPARC monthly dataset download summaryÚTRUE)r&���r%���r���Ú%sendgrid_email_with_unsubscribe_groupr���r(���ÚSEND_MONTHLY_STATS)r,���rL���rM���Zemail_destinationr ���r ���r���rI���²���s���� ý ýzMonthlyStats.send_emailc�������������� ���C���s¬���zx|�j� tj|�jd|¡}|jdkr8t d|�j›�d¡�n>|jdkrNt d¡�n(|jdkrdt d¡�nt d |j›�¡�W�n.�t y¦�}�zt |¡�W�Y�d�}~n d�}~0�0�|S�) Nrn���éÊ���z#Logging email sent successfully to z (202)i“��z=Could not send sendgrid email because rate limit is hit (403)i‘��zGCould not send sendgrid email. Sendgrid keys are likely incorrect (401)zUnknown error. Status code: ) r���rp���r���r(���r'���Ústatus_coder<���Úinfor?���r;���)r,���ÚmessageÚresponseÚerrr ���r ���r���r>���À���s ���� ý zMonthlyStats.send_logging_email)Fr���)NT)Ú__name__Ú __module__Ú__qualname__r-���r4���r0���r9���r:���rA���r@���rD���rF���rB���rC���rg���rI���r>���r ���r ���r ���r���r������s��� r���)r<���rY���Ú app.configr���Úapp.metrics.pennsiever���Z'scripts.monthly_downloads_html_templater���Úscripts.email_senderr���Zscripts.monthly_dbr���Úoperatorr���rU���r"���r ���Údateutil.relativedeltar���r���Úobjectr���r ���r ���r ���r���Ú<module>���s���