def __init__(self): """The Constructor for ObuSummary class""" self.postgres = PostgreSQL() self.couch_query = Queries() self.unit_conversion = UnitConversion() super(ObuSummary, self).__init__()
def __init__(self): """The Constructor for DeviceOverview class""" self.postgres = PostgreSQL() self.couch_query = Queries() self.unit_conversion = UnitConversion() self.calc = calculate_alarm_trigger.CalculateAlarmTrigger() super(DeviceOverview, self).__init__()
def failover(self): """ This API is for Getting Failover --- tags: - Vessel produces: - application/json parameters: - name: token in: header description: Token required: true type: string - name: userid in: header description: User ID required: true type: string - name: vessel_id in: query description: Vessel ID required: true type: string - name: date in: query description: Epoch date required: false type: string - name: limit in: query description: Limit required: true type: integer - name: page in: query description: Page required: true type: integer - name: sort_type in: query description: Sort Type required: false type: string - name: sort_column in: query description: Sort Column required: false type: string - name: filter_column in: query description: Filter Column required: false type: string - name: filter_value in: query description: Filter Value required: false type: string responses: 500: description: Error 200: description: Vessel Failover """ data = {} # VESSEL ID vessel_id = request.args.get('vessel_id') epoch_date = request.args.get('date') limit = int(request.args.get('limit')) page = int(request.args.get('page')) sort_type = request.args.get('sort_type') sort_column = request.args.get('sort_column') filter_column = request.args.get('filter_column') filter_value = request.args.get('filter_value') # GET DATA token = request.headers.get('token') userid = request.headers.get('userid') # CHECK TOKEN token_validation = self.validate_token(token, userid) if not token_validation: data["alert"] = "Invalid Token" data['status'] = 'Failed' # RETURN ALERT return self.return_data(data) if not vessel_id: data["alert"] = "Please complete parameters!" data['status'] = 'Failed' # RETURN ALERT return self.return_data(data) filter_mod_val = "" filter_subcat = "" filter_option = "" filter_val = "" if filter_column and filter_value: i = 0 for filter_col in filter_column.split(","): if filter_col == "category": filter_mod_val = filter_value.split(",")[i] elif filter_col == "sub_category": filter_subcat = filter_value.split(",")[i] elif filter_col == "option": filter_option = filter_value.split(",")[i] elif filter_col == "value": filter_val = filter_value.split(",")[i] i += 1 data = {} data['data'] = [] total_page = 0 if epoch_date: values = self.couch_query.get_complete_values( vessel_id, "FAILOVER", str(self.epoch_default), str(epoch_date), flag='one_doc' ) else: values = self.couch_query.get_complete_values( vessel_id, "FAILOVER", flag='one_doc' ) if values: all_values = values['value'] timestamp = values['timestamp'] temp_datas, options, categories = self.values_wrapper("FAILOVER", all_values, timestamp ) convert = UnitConversion() temp_datas = convert.check_unit(temp_datas) temp_datas = self.add_device_subcategory(temp_datas) temp_datas = self.add_device_category(temp_datas) rows = self.value_filter(filter_mod_val, filter_subcat, filter_option, filter_val, temp_datas) if sort_type and sort_column: sort_column = sort_column.lower() if sort_type.lower() == "desc" and sort_column in ['category', 'sub_category', 'option', 'value']: rows = sorted(rows, key=lambda i: i[sort_column], reverse=True) if sort_type.lower() == "asc": rows = sorted(rows, key=lambda i: i[sort_column]) else: rows = [] options = [] categories = [] datas = self.limits(rows, limit, page) total_count = len(datas) total_page = int(math.ceil(int(total_count - 1) / limit)) final_data = [] temp_category = '' temp_subcat = '' for item in datas: if temp_category == item['category']: item['category'] = '' else: temp_category = item['category'] if temp_subcat == item['sub_category']: item['sub_category'] = '' else: temp_subcat = item['sub_category'] final_data.append(item) data['data'] = final_data data['total_page'] = total_page data['limit'] = int(limit) data['page'] = int(page) data['total_rows'] = total_count data['options'] = options data['categories'] = categories data['subcategories'] = self.get_device_subcategory(datas) data['status'] = 'ok' return self.return_data(data)
def __init__(self): """The Constructor for NoonReportData class """ self.postgresql_query = PostgreSQL() self.unit_conversion = UnitConversion() super(NoonReportData, self).__init__()
class NoonReportData(Common): """Class for NoonReportData""" # INITIALIZE def __init__(self): """The Constructor for NoonReportData class """ self.postgresql_query = PostgreSQL() self.unit_conversion = UnitConversion() super(NoonReportData, self).__init__() def noon_report_data(self): """ This API is to get noon report --- tags: - Email produces: - application/json parameters: - name: token in: header description: Token required: true type: string - name: userid in: header description: User ID required: true type: string - name: mail_log_ids in: query description: Mail log ID's required: true type: string responses: 500: description: Error 200: description: Permission """ data = {} # GET DATA token = request.headers.get('token') userid = request.headers.get('userid') mail_log_ids = request.args.get('mail_log_ids') # CHECK TOKEN token_validation = self.validate_token(token, userid) if not token_validation: data["alert"] = "Invalid Token" data['status'] = 'Failed' # RETURN ALERT return self.return_data(data) # COMPANY DATA datas = self.get_noon_report_data(mail_log_ids) datas['status'] = 'ok' return self.return_data(datas) def get_noon_report_data(self, mail_log_ids): """Return Noon Report Data""" # MAIL LOG IDs if len(mail_log_ids.split(",")) == 1: mlis = "(" + str(mail_log_ids) +")" else: mlis = tuple(mail_log_ids.split(",")) sql_str = "SELECT mail_log_id,message,data_date FROM email_log WHERE " sql_str += "mail_log_id in " + str(mlis) datas = self.postgresql_query.query_fetch_all(sql_str) rows = [] for data in datas or []: temp = {} msg = "" msg += "As of " + data['data_date'] + "\n\n" for message in data['message']: if message['label'] == "": msg += "\n" else: try: # if message['label'] == "LATITUDE": # latitude = self.to_degrees(message['value']) # lat_cardinal = "S" # if float(message['value']) >= 0: lat_cardinal = "N" # message['value'] = str(latitude) + " " + str(lat_cardinal) # elif message['label'] == "LONGITUDE": # longitude = self.to_degrees(message['value']) # long_cardinal = "W" # if float(message['value']) >= 0: long_cardinal = "E" # message['value'] = str(longitude) + " " + str(long_cardinal) if message['label'] in ["LATITUDE", "LONGITUDE"]: message['value'] = self.unit_conversion.to_degrees(message['label'], message['value']) elif message['label'] == "HEADING": message['value'] = str(int(float(message['value']))) + "°" except: message['value'] = "" msg += message['label'] + ": " + message['value'] + "\n" temp['message'] = msg temp['mail_log_id'] = data['mail_log_id'] rows.append(temp) data = {} data['rows'] = rows return data
class NoonReportPDF(Common): """Class for NoonReportPDF""" # INITIALIZE def __init__(self): """The Constructor for NoonReportPDF class""" self.postgresql_query = PostgreSQL() self.unit_conversion = UnitConversion() super(NoonReportPDF, self).__init__() def noon_report_pdf(self): """ This API is to get noon report --- tags: - Email produces: - application/json parameters: - name: token in: header description: Token required: true type: string - name: userid in: header description: User ID required: true type: string - name: mail_log_ids in: query description: Mail log ID's required: true type: string responses: 500: description: Error 200: description: Permission """ data = {} # GET DATA token = request.headers.get('token') userid = request.headers.get('userid') mail_log_ids = request.args.get('mail_log_ids') # CHECK TOKEN token_validation = self.validate_token(token, userid) if not token_validation: data["alert"] = "Invalid Token" data['status'] = 'Failed' # RETURN ALERT return self.return_data(data) output_file = "pdf/" + str(int(time.time())) + "_noon_report.pdf" pdf = self.generate_pdf(mail_log_ids) pdf.output(output_file, "F") datas = {} datas['location'] = output_file datas['status'] = 'ok' return self.return_data(datas) def generate_pdf(self, mail_log_ids): """Generate PDF""" # PDF SIZE Y, X pdf = FPDF('L', 'mm', (279.4, 215.9)) # MAIL LOG IDs if len(mail_log_ids.split(",")) == 1: mlis = "(" + str(mail_log_ids) + ")" else: mlis = tuple(mail_log_ids.split(",")) sql_str = "SELECT el.mail_log_id,el.message,el.data_date,el.created_on,ev.email FROM" sql_str += " email_log el INNER JOIN email_vessel ev ON" sql_str += " el.email_vessel_id=ev.email_vessel_id WHERE" sql_str += " mail_log_id in " + str(mlis) rows = self.postgresql_query.query_fetch_all(sql_str) header = "Noon report" for row in rows: pdf.add_page() self.render_header_data(pdf, header) self.render_details_data(pdf, row) self.render_footer_data(pdf) return pdf def render_details_data(self, pdf, details): """Render Details Data""" pdf.set_font('Arial', '', 10) start_y = 25 data = "As of " + details['data_date'] pdf.text(10, start_y, str(data)) start_y += 10 for info in details['message']: if info['label'] == "": start_y += 5 else: try: # if info['label'] == "LATITUDE": # latitude = self.to_degrees(info['value']) # lat_cardinal = "S" # if float(info['value']) >= 0: lat_cardinal = "N" # info['value'] = str(latitude) + " " + str(lat_cardinal) # elif info['label'] == "LONGITUDE": # longitude = self.to_degrees(info['value']) # long_cardinal = "W" # if float(info['value']) >= 0: long_cardinal = "E" # info['value'] = str(longitude) + " " + str(long_cardinal) if info['label'] in ["LATITUDE", "LONGITUDE"]: info['value'] = self.unit_conversion.to_degrees( info['label'], info['value']) elif info['label'] == "HEADING": info['value'] = str(int(float(info['value']))) + "°" except: info['value'] = "" data = info['label'] + ": " + info['value'] pdf.text(10, start_y, str(data)) start_y += 5 start_y += 5 # TIME AND DATE EMAIL SEND utc = datetime.utcfromtimestamp( details['created_on']).strftime('%A, %d %B %Y %I:%M:%S %p') date_send = utc + " UTC" data = "DATE SENT: " + str(date_send) pdf.text(10, start_y, str(data)) start_y += 5 # EMAIL RECIPIENT data = "RECIPIENT: " + details['email'] pdf.text(10, start_y, str(data)) start_y += 5 def render_header_data(self, pdf, header): """Render Header Data""" # TITLE pdf.set_font('Courier', 'B', 16.5) top_width = pdf.get_string_width(header) pdf.text((top_width / 2) + 65, 12, header) def render_footer_data(self, pdf): """Render Footer Data""" pdf.set_font('Arial', '', 8)