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)
Example #2
0
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)
Example #5
0
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
Example #6
0
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)
Example #7
0
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)
Example #8
0
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)
Example #9
0
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)
Example #10
0
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)
Example #11
0
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)
Example #12
0
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)