def get_services_status(): """The status of various services.""" s = {} try: platform, err = config.get_platform() if err: raise Exception(err) if platform == 'gridcell': # Commenting out ctdb for now as we wont use it for this release! #services = ['smb', 'winbind', 'ctdb', 'glusterd'] services = ['smb', 'winbind', 'glusterd'] for service_name in services: stat, err = command.get_command_output( '/sbin/service %s status' % service_name) ret = None rc = -1 tup, err = command.execute_with_rc('/sbin/service %s status' % service_name) if tup: (ret, rc) = tup if err: raise Exception(err) if rc == 0: lines, er = command.get_output_list(ret) if er: raise Exception(er) s[service_name] = [0, ','.join(lines)] else: err = '' tl, er = command.get_output_list(ret) if er: raise Exception(er) if tl: err = ','.join(tl) tl, er = command.get_error_list(ret) if er: raise Exception(er) if tl: err = err + ','.join(tl) s[service_name] = [-1, err] else: service_dict, err = services_management.get_sysd_services_status() if err: raise Exception(err) for service_name, service_info in service_dict.items(): if service_info['info']['status']['status_str'] in [ 'Failed', 'Unknown State' ]: s[service_name] = [ -1, service_info['info']['status']['output_str'] ] else: s[service_name] = [ 0, service_info['info']['status']['output_str'] ] except Exception, e: return None, 'Error retrieving services status: %s' % str(e)
def main(): lg = None try: lg, err = logger.get_script_logger('Generate status', '/var/log/integralstor/scripts.log', level=logging.DEBUG) logger.log_or_print('Generate status initiated.', lg, level='info') platform, err = config.get_platform() if err: raise Exception(err) default_path = False num_args = len(sys.argv) if num_args > 1: path = sys.argv[1] else: default_path = True path, err = config.get_system_status_path() if err: raise Exception(err) if not path: path = '/tmp' # print platform, path if platform == 'gridcell' and default_path: # This means that I must've been called from a cron script so need # to check if I really need to execute.. from integralstor_gridcell import grid_ops active, err = grid_ops.is_active_admin_gridcell() if err: raise Exception(err) if not active: logger.log_or_print('Not active admin GRIDCell so exiting.', lg, level='info') sys.exit(0) logger.log_or_print("Generating the status in %s" % path, lg, level='info') rc, err = gen_status(path, lg) if err: raise Exception(err) # print rc except Exception, e: str = "Error generating status file : %s" % e logger.log_or_print(str, lg, level='critical') sys.exit(-1)
def get_services_status(): """The status of various services.""" s = {} try: platform, err = config.get_platform() if err: raise Exception(err) if platform == 'gridcell': # Commenting out ctdb for now as we wont use it for this release! #services = ['smb', 'winbind', 'ctdb', 'glusterd'] services = ['smb', 'winbind', 'glusterd'] for service_name in services: stat, err = command.get_command_output( '/sbin/service %s status' % service_name) ret = None rc = -1 tup, err = command.execute_with_rc( '/sbin/service %s status' % service_name) if tup: (ret, rc) = tup if err: raise Exception(err) if rc == 0: lines, er = command.get_output_list(ret) if er: raise Exception(er) s[service_name] = [0, ','.join(lines)] else: err = '' tl, er = command.get_output_list(ret) if er: raise Exception(er) if tl: err = ','.join(tl) tl, er = command.get_error_list(ret) if er: raise Exception(er) if tl: err = err + ','.join(tl) s[service_name] = [-1, err] else: service_dict, err = services_management.get_sysd_services_status() if err: raise Exception(err) for service_name, service_info in service_dict.items(): if service_info['info']['status']['status_str'] in ['Failed', 'Unknown State']: s[service_name] = [-1, service_info['info'] ['status']['output_str']] else: s[service_name] = [ 0, service_info['info']['status']['output_str']] except Exception, e: return None, 'Error retrieving services status: %s' % str(e)
def main(): lg = None try: lg, err = logger.get_script_logger( 'Generate status', '/var/log/integralstor/scripts.log', level=logging.DEBUG) logger.log_or_print('Generate status initiated.', lg, level='info') platform, err = config.get_platform() if err: raise Exception(err) default_path = False num_args = len(sys.argv) if num_args > 1: path = sys.argv[1] else: default_path = True path, err = config.get_system_status_path() if err: raise Exception(err) if not path: path = '/tmp' # print platform, path if platform == 'gridcell' and default_path: # This means that I must've been called from a cron script so need # to check if I really need to execute.. from integralstor_gridcell import grid_ops active, err = grid_ops.is_active_admin_gridcell() if err: raise Exception(err) if not active: logger.log_or_print( 'Not active admin GRIDCell so exiting.', lg, level='info') sys.exit(0) logger.log_or_print("Generating the status in %s" % path, lg, level='info') rc, err = gen_status(path, lg) if err: raise Exception(err) # print rc except Exception, e: str = "Error generating status file : %s" % e logger.log_or_print(str, lg, level='critical') sys.exit(-1)
def check_for_gridcell_errors(si): alerts_list = [] try: platform, err = config.get_platform() if err: raise Exception(err) alerts_list = [] # print si.keys() salt_connectivity, err = grid_ops.check_salt_connectivity( None, si.keys()) if err: raise Exception(err) # print salt_connectivity for node_name, node in si.items(): msg = 'GRIDCell %s : ' % node_name alerts = False res, err = networking.can_ping(node_name) if err: raise Exception(err) if not res: alerts = True msg += 'Cannot ping GRIDCell. ' if node_name not in salt_connectivity or not salt_connectivity[node_name]: msg += 'Cannot contact admin agent on GRIDCell. ' if 'errors' in node and node['errors']: alerts = True msg += '. '.join(node['errors']) ret_alert, err = ret_fs_usage_alert(node_name,85) if err: pass if ret_alert: alerts = True msg += str(ret_alert) if alerts: alerts_list.append(msg) except Exception, e: return None, 'Error polling for alerts : %s' % e
def delete_all_shares(): """Delete all shares from the db.""" try: db_path, err = config.get_db_path() if err: raise Exception(err) platform, err = config.get_platform() if err: raise Exception(err) cmd_list = [] cmd_list.append(["delete from samba_shares "]) if platform and platform == 'gridcell': cmd_list.append(["delete from samba_valid_users "]) ret, err = db.execute_iud(db_path, cmd_list) if err: raise Exception(err) except Exception, e: return False, 'Error deleting all CIFS shares : %s' % str(e)
def update_auth_method(security): """Update the currently set authentication method in the db. """ try: db_path, err = config.get_db_path() if err: raise Exception(err) d, err = get_auth_settings() if err: raise Exception(err) cl = [] if not d: # Insert a default entry before they modify the settings.. cl.append([ "insert into samba_global_common (id, workgroup, netbios_name, security, include_homes_section) values (?, ?, ?, ?, ?)", ( 1, 'workgroup', 'netbios_name', security, True, ) ]) else: cl.append([ "update samba_global_common set security='%s' where id=1" % security ]) platform, err = config.get_platform() if err: raise Exception(err) if platform and platform == 'gridcell': cl.append(["delete from samba_valid_users"]) ret, err = db.execute_iud(db_path, cl) if err: raise Exception(err) except Exception, e: return False, 'Error changing authentication method : %s' % str(e)
def main(): try: platform, err = config.get_platform() if err: raise Exception(err) lck, err = lock.get_lock('poll_for_alerts') if err: raise Exception(err) if not lck: raise Exception('Could not acquire lock. Exiting.') if platform == 'gridcell': from integralstor_gridcell import system_info gluster_lck, err = lock.get_lock('gluster_commands') else: from integralstor import system_info si, err = system_info.load_system_config() if platform == 'gridcell': lock.release_lock('gluster_commands') if err: raise Exception(err) if not si: raise Exception('Could not load system information') alert_list = [] for node_name, node in si.items(): if 'errors' in node and node['errors']: if platform == 'gridcell': msg = 'GRIDCell : %s. ' % node_name else: msg = '' msg += '. '.join(node['errors']) alert_list.append(msg) hw_platform, err = config.get_hardware_platform() if hw_platform: if hw_platform == 'dell': from integralstor_utils.platforms import dell alerts_dict, err = dell.get_alert_logs() if alerts_dict: current_time = int(time.time()) for time_stamp, alerts_list in alerts_dict.items(): for alert_dict in alerts_list: if alert_dict['Severity'] == 'Critical': if (current_time - time_stamp) < (60 * 60): alert_list.append( alert_dict['description']) # print time_stamp, alert_dict # print "======================" # print alert_list # print "======================" if alert_list: alerts.raise_alert(alert_list) lock.release_lock('poll_for_alerts') except Exception, e: print "Error generating alerts : %s ! Exiting." % str(e) sys.exit(-1)
def create_share(name, comment, guest_ok, read_only, path, display_path, browseable, users, groups, vol, hosts_allow=None, hosts_deny=None): """Create a new share in the db.""" try: db_path, err = config.get_db_path() if err: raise Exception(err) platform, err = config.get_platform() if err: raise Exception(err) d, err = get_auth_settings() if err: raise Exception(err) if not d: raise Exception( "Authentication settings not set. Please set authentication settings before creating shares." ) shl, err = get_shares_list() if err: raise Exception(err) if shl: for sh in shl: if sh["name"] == name: raise Exception("A share with that name already exists") share_id, err = db.execute_iud(db_path, [[ "insert into samba_shares (name, vol, path, display_path, comment, read_only, guest_ok, browseable, share_id, hosts_allow, hosts_deny) values (?,?, ?,?,?,?,?,?,NULL,?,?)", ( name, vol, path, display_path, comment, read_only, guest_ok, browseable, hosts_allow, hosts_deny, ) ]], True) if err: raise Exception(err) # print share_id, err if platform and platform == 'gridcell': if not guest_ok: cmd_list = [] if users: for user in users: cmd_list.append([ "insert into samba_valid_users (id, share_id, grp, name) values (NULL,?,?,?)", ( share_id, False, user, ) ]) if groups: for group in groups: cmd_list.append([ "insert into samba_valid_users (id, share_id, grp, name) values (NULL,?,?,?)", ( share_id, True, group, ) ]) ret, err = db.execute_iud(db_path, cmd_list, True) if err: raise Exception(err) except Exception, e: return False, 'Error creating CIFS share : %s' % str(e)
def update_share(share_id, name, comment, guest_ok, read_only, path, browseable, users, groups, hosts_allow=None, hosts_deny=None): """Used to update the information about an existing share in the db.""" try: db_path, err = config.get_db_path() if err: raise Exception(err) platform, err = config.get_platform() if err: raise Exception(err) cmd_list = [] cmd_list.append([ "update samba_shares set comment=?, read_only=?, guest_ok=?, browseable=?, hosts_allow=?, hosts_deny=? where share_id=?", ( comment, read_only, guest_ok, browseable, hosts_allow, hosts_deny, share_id, ) ]) if platform and platform == 'gridcell': cmd_list.append([ "delete from samba_valid_users where share_id=?", (share_id, ) ]) if not guest_ok: if users: for user in users: cmd_list.append([ "insert into samba_valid_users (id, share_id, grp, name) values (NULL,?,?,?)", ( share_id, False, user, ) ]) if groups: for group in groups: cmd_list.append([ "insert into samba_valid_users (id, share_id, grp, name) values (NULL,?,?,?)", ( share_id, True, group, ) ]) ret, err = db.execute_iud(db_path, cmd_list) if err: raise Exception(err) except Exception, e: return False, 'Error saving CIFS share : %s' % str(e)
def _parse_audit_entry(entry): """Parse a db entry dict from the audit table and return a dict with appropriate fields.""" try: gridcell_action_dict = { "vol_stop": "Volume stop", "vol_start": "Volume start", "vol_delete": "Volume delete", "add_brick": "Add volume storage", "remove_brick_start": "Remove volume storage - start", "remove_brick_status": "Remove volume storage - status", "remove_brick_commit": "Remove volume storage - commit", "replace_brick_commit": "Replace volume storage - commit", "rebalance_start": "Volume rebalance - start", "rebalance_status": "Volume rebalance - status", "rebalance": "Volume rebalance - start", "volume_heal_full": "Full volume heal start", "volume_heal_info": "Full volume heal info", "create_volume": "Volume creation", "expand_volume": "Volume expansion", "vol_rebalance_stop": "Stop volume rebalance", "log_rotate": "Rotate volume log", "add_storage": "Add GRIDCells to trusted storage pool", "remove_storage": "Remove GRIDCells from trusted storage pool", "vol_rebalance_start": "Start volume rebalance", "create_snapshot": "Create volume snapshot", "delete_snapshot": "Delete volume snapshot", "restore_snapshot": "Restore volume snapshot", "deactivate_snapshot": "Deactivate volume snapshot", "activate_snapshot": "Activate volume snapshot", "set_vol_options": "Set volume option", "set_vol_quota": "Set quota", "remove_vol_quota": "Remove quota", "change_quota_status": "Enable/disable volume quota", "replace_node": "Replace GRIDCell", "modify_share": "Modify a CIFS share", "delete_share": "Delete a CIFS share", "create_share": "Create a CIFS share", "modify_samba_settings": "Modify CIFS authentication settings", "create_local_user": "******", "delete_local_user": "******", "change_local_user_password": "******", "modify_user": "******", "hardware_scan_node_added": "Added a new GRIDCell to grid", "modify_admin_password": "******", "create_iscsi_target": "Create ISCSI target ", "delete_iscsi_target": "Remove ISCSI target", "create_iscsi_lun": "Create ISCSI LUN", "delete_iscsi_lun": "Remove ISCSI LUN", "add_iscsi_target_authentication": "Add ISCSI target authentication", "remove_iscsi_target_authentication": "Remove ISCSI target authentication", "replace_disk_offline_disk": "Disk replacement - old disk offlined", "replace_disk_scheduled": "Disk replacement - disk replacement successfully scheduled", "add_iscsi_acl": "Add ISCSI ACL", "remove_iscsi_acl": "Remove ISCSI ACL", } integralstor_action_dict = { "update_system_datetimezone": "Updated system date/time/timezone", 'delete_remote_monitoring_server': 'Removed remote monitoring server', 'update_remote_monitoring_server': 'Created/updated remote monitoring server', "factory_defaults_reset": "Factory defaults reset", "delete_certificate": "Deleted a SSL certificate", "edit_aces": "Access control entry modified", "add_aces": "Access control entry created", "delete_ace": "Access control entry removed", "create_dir": "Directory created", "create_self_signed_certificate": "Created a self signed SSL certificate", "upload_certificate": "Uploaded a SSL certificate", "add_zfs_spares": "Spare disk(s) added to pool", "schedule_zfs_snapshot": "Snapshot scheduling added/modified", "remove_zfs_spare": "Spare disk removed from pool", "remove_zfs_quota": "Removed ZFS quota", "set_zfs_quota": "Set ZFS quota", "create_vlan": "Created network VLAN", "remove_vlan": "Removed network VLAN", "modify_local_user_gid": "Local user's primary group set", "modify_local_user_grp_membership": "Local user's group membership modified", "create_local_user": "******", "create_local_group": "Local group created", "delete_local_group": "Local group removed", "delete_local_user": "******", "change_local_user_password": "******", "modify_dir_owner_permissions": "Directory ownership/permissions modified", "modify_dir_sticky_bit": "Directory sticky bit modified", "modify_cifs_share": "CIFS share modified", "delete_cifs_share": "CIFS share removed", "create_cifs_share": "CIFS share created", "modify_samba_settings": "CIFS authentication settings modified", "delete_nfs_share": "NFS share removed", "edit_nfs_share": "NFS share modified", "create_nfs_share": "NFS share created", "create_iscsi_target": "ISCSI target created", "delete_iscsi_target": "ISCSI target removed", "create_iscsi_lun": "ISCSI LUN created", "delete_iscsi_lun": "ISCSI LUN removed", "add_iscsi_target_authentication": "ISCSI target authentication added", "remove_iscsi_target_authentication": "ISCSI target authentication removed", "add_iscsi_acl": "ISCSI ACL added", "remove_iscsi_acl": "ISCSI ACL removed", "change_service_status": "Service status modified", "set_interface_state": "Network interface state modified", "edit_interface_address": "Network interface address modified", "create_bond": "Network interface bond created", "remove_bond": "Network interface bond removed", "edit_hostname": "System hostname modified", "set_dns_nameservers": "DNS nameservers modified", "modify_admin_password": "******", "create_zfs_pool": "ZFS pool created", "expand_zfs_pool": "ZFS pool expanded", "import_zfs_pool": "ZFS pool imported", "export_zfs_pool": "ZFS pool exported", "scrub_zfs_pool": "ZFS pool scrub initiated", "clear_zfs_pool": "Clear ZFS pool errors", "delete_zfs_pool": "ZFS pool removed", "edit_zfs_slog": "ZFS pool write cache modified", "remove_zfs_slog": "ZFS pool write cache removed", "edit_zfs_l2arc": "ZFS pool read cache modified", "remove_zfs_l2arc": "ZFS pool read cache removed", "edit_zfs_dataset": "ZFS dataset modified", "delete_zfs_dataset": "ZFS dataset removed", "create_zfs_zvol": "ZFS block device volume created", "delete_zfs_zvol": "ZFS block device volume removed", "create_zfs_dataset": "ZFS dataset created", "create_zfs_snapshot": "ZFS snapshot created", "delete_zfs_snapshot": "ZFS snapshot removed", "rollback_zfs_snapshot": "ZFS snapshot rolled back", "replace_disk_offline_disk": "Disk replacement - old disk offlined", "replace_disk_replaced_disk": "Disk replacement - disk replaced successfully", "rename_zfs_snapshot": "ZFS snapshot renamed", "create_rsync_share": "Created new RSync share ", "edit_rsync_share": "Edited RSync share ", "delete_rsync_share": "Deleted RSync share ", "remove_background_task": "Removed background task ", "create_remote_replication": "Created remote replication ", "modify_remote_replication": "Modified remote replication ", "remove_remote_replication": "Removed remote replication ", "task_fail": "Task failed ", "task_start": "Task started ", "task_complete": "Task completed ", "remove_ssh_user_key": "Removed ssh user key ", "upload_ssh_user_key": "Uploaded ssh user key ", "remove_ssh_host_key": "Removed ssh host key ", "upload_ssh_host_key": "Uploaded ssh host key ", } platform, err = config.get_platform() if err: raise Exception(err) if not platform: raise Exception('Could not determine the platform') if platform not in ['integralstor', 'gridcell']: raise Exception('Unknown platform') if platform == 'integralstor': action_dict = integralstor_action_dict else: action_dict = gridcell_action_dict d = {} # d["time"] = time.strftime( # "%a, %d %b %Y %H:%M:%S", time.localtime(int(str[:13]))) # d["time"] = time.strftime( # "%a, %d %b %Y %H:%M:%S", time.localtime(int(entry['audit_time']))) tz = pytz.timezone('UTC') dt_obj = django.utils.timezone.make_aware( datetime.datetime.fromtimestamp(entry['audit_time']), tz) local_timezone, err = system_date_time.get_current_timezone() if err: raise Exception(err) if 'timezone_str' not in local_timezone: timezone_str = 'UTC' else: timezone_str = local_timezone['timezone_str'] tz = pytz.timezone(timezone_str) now_local = dt_obj.astimezone(tz) d["time"] = now_local.strftime("%a, %d %b %Y %H:%M:%S") d["ip"] = entry['source_ip'] d["username"] = entry['username'] action = entry['audit_code'] if action in action_dict: d["action"] = action_dict[action] else: d["action"] = "Unknown" d["action_str"] = entry['audit_str'] except Exception, e: return None, 'Error decoding audit entry: %s' % (e)
def _parse_audit_entry(entry): """Parse a db entry dict from the audit table and return a dict with appropriate fields.""" try: gridcell_action_dict = { "vol_stop": "Volume stop", "vol_start": "Volume start", "vol_delete": "Volume delete", "add_brick": "Add volume storage", "remove_brick_start": "Remove volume storage - start", "remove_brick_status": "Remove volume storage - status", "remove_brick_commit": "Remove volume storage - commit", "replace_brick_commit": "Replace volume storage - commit", "rebalance_start": "Volume rebalance - start", "rebalance_status": "Volume rebalance - status", "rebalance": "Volume rebalance - start", "volume_heal_full": "Full volume heal start", "volume_heal_info": "Full volume heal info", "create_volume": "Volume creation", "expand_volume": "Volume expansion", "vol_rebalance_stop": "Stop volume rebalance", "log_rotate": "Rotate volume log", "add_storage": "Add GRIDCells to trusted storage pool", "remove_storage": "Remove GRIDCells from trusted storage pool", "vol_rebalance_start": "Start volume rebalance", "create_snapshot": "Create volume snapshot", "delete_snapshot": "Delete volume snapshot", "restore_snapshot": "Restore volume snapshot", "deactivate_snapshot": "Deactivate volume snapshot", "activate_snapshot": "Activate volume snapshot", "set_vol_options": "Set volume option", "set_vol_quota": "Set quota", "remove_vol_quota": "Remove quota", "change_quota_status": "Enable/disable volume quota", "replace_node": "Replace GRIDCell", "modify_share": "Modify a CIFS share", "delete_share": "Delete a CIFS share", "create_share": "Create a CIFS share", "modify_samba_settings": "Modify CIFS authentication settings", "create_local_user": "******", "delete_local_user": "******", "change_local_user_password": "******", "modify_user": "******", "hardware_scan_node_added": "Added a new GRIDCell to grid", "modify_admin_password": "******", "create_iscsi_target": "Create ISCSI target ", "delete_iscsi_target": "Remove ISCSI target", "create_iscsi_lun": "Create ISCSI LUN", "delete_iscsi_lun": "Remove ISCSI LUN", "add_iscsi_target_authentication": "Add ISCSI target authentication", "remove_iscsi_target_authentication": "Remove ISCSI target authentication", "replace_disk_offline_disk": "Disk replacement - old disk offlined", "replace_disk_scheduled": "Disk replacement - disk replacement successfully scheduled", "add_iscsi_acl": "Add ISCSI ACL", "remove_iscsi_acl": "Remove ISCSI ACL", } integralstor_action_dict = { "update_system_datetimezone": "Updated system date/time/timezone", 'delete_remote_monitoring_server': 'Removed remote monitoring server', 'update_remote_monitoring_server': 'Created/updated remote monitoring server', "factory_defaults_reset": "Factory defaults reset", "delete_certificate": "Deleted a SSL certificate", "edit_aces": "Access control entry modified", "add_aces": "Access control entry created", "delete_ace": "Access control entry removed", "create_dir": "Directory created", "create_self_signed_certificate": "Created a self signed SSL certificate", "upload_certificate": "Uploaded a SSL certificate", "add_zfs_spares": "Spare disk(s) added to pool", "schedule_zfs_snapshot": "Snapshot scheduling added/modified", "remove_zfs_spare": "Spare disk removed from pool", "remove_zfs_quota": "Removed ZFS quota", "set_zfs_quota": "Set ZFS quota", "create_vlan": "Created network VLAN", "remove_vlan": "Removed network VLAN", "modify_local_user_gid": "Local user's primary group set", "modify_local_user_grp_membership": "Local user's group membership modified", "create_local_user": "******", "create_local_group": "Local group created", "delete_local_group": "Local group removed", "delete_local_user": "******", "change_local_user_password": "******", "modify_dir_owner_permissions": "Directory ownership/permissions modified", "modify_dir_sticky_bit": "Directory sticky bit modified", "modify_cifs_share": "CIFS share modified", "delete_cifs_share": "CIFS share removed", "create_cifs_share": "CIFS share created", "modify_samba_settings": "CIFS authentication settings modified", "delete_nfs_share": "NFS share removed", "edit_nfs_share": "NFS share modified", "create_nfs_share": "NFS share created", "create_iscsi_target": "ISCSI target created", "delete_iscsi_target": "ISCSI target removed", "create_iscsi_lun": "ISCSI LUN created", "delete_iscsi_lun": "ISCSI LUN removed", "add_iscsi_target_authentication": "ISCSI target authentication added", "remove_iscsi_target_authentication": "ISCSI target authentication removed", "add_iscsi_acl": "ISCSI ACL added", "remove_iscsi_acl": "ISCSI ACL removed", "change_service_status": "Service status modified", "set_interface_state": "Network interface state modified", "edit_interface_address": "Network interface address modified", "create_bond": "Network interface bond created", "remove_bond": "Network interface bond removed", "edit_hostname": "System hostname modified", "set_dns_nameservers": "DNS nameservers modified", "modify_admin_password": "******", "create_zfs_pool": "ZFS pool created", "expand_zfs_pool": "ZFS pool expanded", "import_zfs_pool": "ZFS pool imported", "export_zfs_pool": "ZFS pool exported", "scrub_zfs_pool": "ZFS pool scrub initiated", "clear_zfs_pool": "Clear ZFS pool errors", "delete_zfs_pool": "ZFS pool removed", "edit_zfs_slog": "ZFS pool write cache modified", "remove_zfs_slog": "ZFS pool write cache removed", "edit_zfs_l2arc": "ZFS pool read cache modified", "remove_zfs_l2arc": "ZFS pool read cache removed", "edit_zfs_dataset": "ZFS dataset modified", "delete_zfs_dataset": "ZFS dataset removed", "create_zfs_zvol": "ZFS block device volume created", "delete_zfs_zvol": "ZFS block device volume removed", "create_zfs_dataset": "ZFS dataset created", "create_zfs_snapshot": "ZFS snapshot created", "delete_zfs_snapshot": "ZFS snapshot removed", "rollback_zfs_snapshot": "ZFS snapshot rolled back", "replace_disk_offline_disk": "Disk replacement - old disk offlined", "replace_disk_replaced_disk": "Disk replacement - disk replaced successfully", "rename_zfs_snapshot": "ZFS snapshot renamed", "create_rsync_share": "Created new RSync share ", "edit_rsync_share": "Edited RSync share ", "delete_rsync_share": "Deleted RSync share ", "remove_background_task": "Removed background task ", "create_remote_replication": "Created remote replication ", "modify_remote_replication": "Modified remote replication ", "remove_remote_replication": "Removed remote replication ", "task_fail": "Task failed ", "task_start": "Task started ", "task_complete": "Task completed ", "remove_ssh_user_key": "Removed ssh user key ", "upload_ssh_user_key": "Uploaded ssh user key ", "remove_ssh_host_key": "Removed ssh host key ", "upload_ssh_host_key": "Uploaded ssh host key ", } platform, err = config.get_platform() if err: raise Exception(err) if not platform: raise Exception('Could not determine the platform') if platform not in ['integralstor', 'gridcell']: raise Exception('Unknown platform') if platform == 'integralstor': action_dict = integralstor_action_dict else: action_dict = gridcell_action_dict d = {} # d["time"] = time.strftime( # "%a, %d %b %Y %H:%M:%S", time.localtime(int(str[:13]))) # d["time"] = time.strftime( # "%a, %d %b %Y %H:%M:%S", time.localtime(int(entry['audit_time']))) tz = pytz.timezone('UTC') dt_obj = django.utils.timezone.make_aware( datetime.datetime.fromtimestamp(entry['audit_time']), tz) local_timezone, err = system_date_time.get_current_timezone() if err: raise Exception(err) if 'timezone_str' not in local_timezone: timezone_str = 'UTC' else: timezone_str = local_timezone['timezone_str'] tz = pytz.timezone(timezone_str) now_local = dt_obj.astimezone(tz) d["time"] = now_local.strftime("%a, %d %b %Y %H:%M:%S") d["ip"] = entry['source_ip'] d["username"] = entry['username'] action = entry['audit_code'] if action in action_dict: d["action"] = action_dict[action] else: d["action"] = "Unknown" d["action_str"] = entry['audit_str'] except Exception, e: return None, 'Error decoding audit entry: %s' % (e)