예제 #1
0
파일: index.py 프로젝트: zodman/ZoomFoundry
def users_panel(db):

    host = zoom.system.request.host

    data = db(
        """
    select
        users.username,
        max(log.timestamp) as timestamp,
        count(*) as requests
    from log, users
        where log.user_id = users.id
        and timestamp >= %s
        and server = %s
        and path not like "%%\\/\\_%%"
    group by users.username
    order by timestamp desc
    limit 10
    """,
        today() - datetime.timedelta(days=14), host)

    rows = []
    for rec in data:
        row = [
            link_to_user(rec[0]),
            how_long_ago(rec[1]),
            rec[2],
        ]
        rows.append(row)

    labels = 'user', 'last seen', 'requests'
    return zoom.browse(rows, labels=labels, title=link_to_page('Users'))
예제 #2
0
파일: index.py 프로젝트: zodman/ZoomFoundry
def error_panel(db):

    host = zoom.system.request.host

    data = db(
        """
        select
            log.id,
            username,
            path,
            timestamp
        from log left join users on log.user_id = users.id
        where log.status in ("E") and timestamp>=%s
        and server = %s
        order by log.id desc
        limit 10
        """, today(), host)

    rows = []
    for rec in data:
        row = [
            link_to(str(rec[0]), '/admin/entry/' + str(rec[0])),
            link_to_user(rec[1]),
            rec[2],
            how_long_ago(rec[3]),
        ]
        rows.append(row)

    labels = 'id', 'user', 'path', 'when'
    return zoom.browse(rows, labels=labels, title=link_to_page('Errors'))
예제 #3
0
파일: index.py 프로젝트: zodman/ZoomFoundry
def activity_panel(db):

    host = zoom.system.request.host

    data = db(
        """
    select
        log.id,
        users.username,
        log.address,
        log.path,
        log.timestamp,
        log.elapsed
    from log left join users on log.user_id = users.id
    where server = %s and path not like "%%\\/\\_%%"
    and log.status = 'C'
    order by timestamp desc
    limit 15
    """, host)

    rows = []
    for rec in data:
        row = [
            link_to(str(rec[0]), '/admin/entry/' + str(rec[0])),
            link_to_user(rec[1]),
            rec[2],
            zoom.link_to(rec[3]),
            how_long_ago(rec[4]),
            rec[4],
            rec[5],
        ]
        rows.append(row)

    labels = 'id', 'user', 'address', 'path', 'when', 'timestamp', 'elapsed'
    return zoom.browse(rows, labels=labels, title=link_to_page('Requests'))
예제 #4
0
파일: apps.py 프로젝트: zodman/ZoomFoundry
    def index(self):
        def get_group_link(group_id):
            """Return a group link"""
            group = groups.get(group_id)
            return group.link if group else zoom.html.span(
                'missing', title='unknown subgroup id {!r}'.format(group_id))

        def fmt(app):
            """Format an app record"""
            name = app.name
            group_name = 'a_' + app.name
            app_group = zoom.system.site.groups.first(name=group_name)
            groups = ', '.join(
                get_group_link(s) for g, s in subgroups
                if g == app_group._id) or 'none' if app_group else ''
            return [
                app.title, app.name, app.path, groups,
                (bool(app.in_development) and 'development' or '')
            ]

        db = zoom.system.site.db
        subgroups = list(db('select * from subgroups'))
        groups = dict((g.group_id, g) for g in zoom.system.site.groups)
        data = [
            fmt(app) for app in sorted(zoom.system.site.apps,
                                       key=lambda a: a.title.lower())
        ]
        content = zoom.browse(
            data, labels=['Title', 'App', 'Path', 'Groups', 'Status'])
        return zoom.page(content, title='Apps')
예제 #5
0
    def index(self):

        if user.is_admin:
            labels = (
                'First Name',
                'Last Name',
                'Username',
                'Password',
                'Token',
                'Expires',
                'Action',
            )
            content = browse(registrations, labels=labels)
            return page(content, title='Registrations')

        messages = ul(get_errors(fields), Class='wrong')

        form = fields.edit()

        agreements = """
        By registering, I agree to the <dz:site_name> <a
        href="/terms.html">Terms of Use</a> and <a href="/privacy.html">Privacy
        Policy</a>.
        """

        content = load('registration.html')
        return page(
            content.format(fill=locals()),
            css=load('style.css'),
        )
예제 #6
0
파일: index.py 프로젝트: zodman/ZoomFoundry
    def requests(self, show_all=False):
        def fmt(rec):
            entry = (link_to(str(rec[0]), '/admin/entry/' + str(rec[0])), )
            user = (zoom.helpers.who(rec[4]), )
            link = (zoom.link_to(rec[2]), )
            return entry + (rec[1], ) + link + rec[3:4] + user + rec[5:]

        path_filter = '' if show_all else 'and path not like "%%\\/\\_%%"'
        db = self.model.site.db
        data = db(
            """
            select
                id, app, path, status, user_id, address, login, timestamp, elapsed
            from log
            where status in ('C', 'I', 'W')
            and server = %s
            {}
            order by id desc
            limit 100""".format(path_filter), zoom.system.request.host)
        labels = 'id', 'app', 'path', 'status', 'user', 'address', 'login', 'timestamp', 'elapsed'
        data = list(map(fmt, data))
        actions = () if show_all else ('Show All', )
        return page(zoom.browse(data, labels=labels),
                    title='Requests',
                    actions=actions)
예제 #7
0
파일: apps.py 프로젝트: brettgoss/zoom
    def index(self):

        def get_group_link(group_id):
            group = groups.get(group_id)
            return group.link if group else zoom.html.span(
                'missing',
                title='unknown subgroup id {!r}'.format(group_id)
            )

        def fmt(app):
            name = app.name
            group_name = 'a_' + app.name
            app_group = zoom.system.site.groups.first(name=group_name)
            groups = ', '.join(
                get_group_link(s) for g, s in subgroups if g == app_group._id
            ) if app_group else ''
            return [
                app.name,
                app.title,
                app.path,
                groups,
            ]

        db = zoom.system.site.db
        subgroups = list(db('select * from subgroups'))
        groups = dict((g._id, g) for g in zoom.system.site.groups)
        data = [fmt(app) for app in sorted(zoom.system.site.apps, key=lambda a: a.name)]
        content = zoom.browse(
            data,
            labels=['App', 'Title', 'Path', 'Groups']
        )
        return zoom.page(content, title='Apps')
예제 #8
0
def group_activity_log(group):
    """gathers log information for the group

    Authorization activity related to groups is captured
    by zoom and retreived from the audit_log table.

    Note that system log entries are host specific,
    however, audit logs are not host specific
    as hosts sometimes share authozation databases and
    thus changes in authorizations affect all hosts
    using that database.
    """
    query = """
        select
            app,
            user_id,
            activity,
            subject1,
            subject2,
            timestamp
        from audit_log
        where subject2=%s
        union select
            app,
            user_id,
            activity,
            subject1,
            subject2,
            timestamp
        from audit_log
        where
            activity in (
                "add group",
                "remove group",
                "create group",
                "delete group",
                "add member",
                "remove member"
            )
            and subject1=%s
        order by timestamp desc
        limit 20
    """
    db = zoom.system.site.db
    items = [(app, zoom.helpers.who(user_id), activity, subject1, subject2,
              timestamp, zoom.helpers.when(timestamp))
             for app, user_id, activity, subject1, subject2, timestamp in db(
                 query, group.name, group.name)]
    labels = [
        'App', 'User', 'Activity', 'Subject1', 'Subject2', 'Timestamp', 'When'
    ]
    auth_activity = zoom.browse(items, labels=labels)
    return """
    <h2>Recent Authorizations Activity<h2>
    {}
    """.format(auth_activity)
예제 #9
0
파일: index.py 프로젝트: zodman/ZoomFoundry
 def _system_log(self):
     self.model.site.logging = False
     db = self.model.site.db
     data = db("""
         select
             id, app, path, status, address, elapsed, message
         from log
         order by id desc limit 50
         """)
     return zoom.browse(data)
예제 #10
0
파일: groups.py 프로젝트: robinsax/zoom
    def index(self, q='', *args, **kwargs):
        """collection landing page"""

        c = self.collection
        user = c.user

        if c.request.route[-1:] == ['index']:
            return zoom.redirect_to('/'+'/'.join(c.request.route[:-1]), **kwargs)

        actions = user.can('create', c) and ['New'] or []

        if q:
            title = 'Selected ' + c.title
            records = c.search(q)
        else:
            title = c.title
            records = c.store.find(type='U')

        authorized = (i for i in records if user.can('read', i))
        items = sorted(authorized, key=c.order)
        num_items = len(items)

        if num_items != 1:
            footer_name = c.title.lower()
        else:
            footer_name = c.item_title.lower()

        if q:
            footer = '{:,} {} found in search of {:,} {}'.format(
                num_items,
                footer_name,
                len(c.store),
                c.title.lower(),
            )
        else:
            footer = '%s %s' % (len(items), footer_name)

        admin_ids = [item.admin_group_id for item in items]
        admin_lookup = {
            group.group_id: zoom.link_to(group.name, 'groups', group.group_id)
            for group in zoom.system.site.groups
            if group.group_id in admin_ids
        }

        for item in items:
            item.administrators = admin_lookup.get(item.admin_group_id, '')

        content = zoom.browse(
            [c.model(i) for i in items],
            labels=c.get_labels(),
            columns=c.get_columns(),
            footer=footer
        )

        return zoom.page(content, title=title, actions=actions, search=q)
예제 #11
0
파일: index.py 프로젝트: robinsax/zoom
    def index(self, q=''):

        content = callback(self._index)

        if q:
            request = zoom.system.request
            users_collection = users.get_users_collection(request)
            user_records = users_collection.search(q)

            groups_collection = groups.get_groups_collection(request)
            group_records = groups_collection.search(q)

            if user_records or group_records:
                content = zoom.Component()
                if group_records:
                    footer = '%d groups found' % len(group_records)
                    content += zoom.browse(
                        group_records,
                        columns=groups_collection.columns,
                        labels=groups_collection.labels,
                        title='Groups',
                        footer=footer,
                    )

                if user_records:
                    footer = '%d users found' % len(user_records)
                    content += zoom.browse(
                        user_records,
                        columns=users_collection.columns,
                        labels=users_collection.labels,
                        title='Users',
                        footer=footer,
                    )
            else:
                zoom.alerts.warning('no records found')

        return page(
            content,
            title='Overview',
            search=q
        )
예제 #12
0
 def list(self):
     if zoom.system.request.user.is_admin:
         labels = (
             'First Name',
             'Last Name',
             'Username',
             'Token',
             'Expires',
             'Action',
         )
         content = zoom.browse(model.get_registrations(), labels=labels)
         return zoom.page(content, title='Registrations')
예제 #13
0
    def index(self):
        """Returns a list of background jobs"""

        jobs = zoom.sites.Site(zoom.system.site.path).get_background_jobs()

        labels = 'Name', 'Path', 'Cron', 'Scheduled', 'Status'
        content = zoom.browse(((
            job.name,
            job.path,
            job.cron,
            job.scheduled,
            job.status,
        ) for job in jobs),
                              labels=labels)

        title = 'Jobs <span class="meta"><small>alpha</small></span>'
        return zoom.page(content, title=title)
예제 #14
0
파일: index.py 프로젝트: robinsax/zoom
def log_data(db, status, n, limit, q):
    """retreive log data"""

    host = zoom.system.request.host

    statuses = tuple(status)
    offset = int(n) * int(limit)
    cmd = """
        select
            id,
            status,
            user_id,
            address,
            app,
            path,
            timestamp,
            elapsed
        from log
        where status in %s and server = %s
        order by id desc
        limit {limit}
        offset {offset}
        """.format(
            limit=int(limit),
            offset=offset,
            statuses=statuses
        )
    data = db(cmd, statuses, host)
    data = [
        [
            link_to(
                str(item[0]),
                '/admin/entry/' + str(item[0])
            ),
            item[1],
            zoom.helpers.who(item[2]),
        ] + list(item[3:])
        for item in data
        if q in repr(item)
    ]
    labels = (
        'id', 'status', 'user', 'address', 'app',
        'path', 'timestamp', 'elapsed'
    )
    return zoom.browse(data, labels=labels)
예제 #15
0
파일: index.py 프로젝트: robinsax/zoom
    def audit(self):
        """view audit log"""
        def fmt(rec):
            user = (zoom.helpers.who(rec[2]),)
            when = (zoom.helpers.when(rec[-1]),)
            return rec[0:2] + user + rec[3:-1] + when

        db = self.model.site.db
        data = list(map(fmt, db("""
            select
                *
            from audit_log
            order by id desc
            limit 100"""
        )))

        labels = 'ID', 'App', 'By Whom', 'Activity', 'Subject 1', 'Subject 2', 'When'
        return page(zoom.browse(data, labels=labels), title='Activity')
예제 #16
0
def view():

    hr = '<hr>\n'

    data = [('String', 'Integer', 'Decimal'),
            ('One', 1, decimal.Decimal(1234)),
            ('Two', 2, decimal.Decimal(2345))]

    content = zoom.Component(
        'zoom.browse',
        zoom.browse(data, title='Sample Header',
                    footer='sample footer'), hr, 'zoom.components.HeaderBar',
        c.HeaderBar(left=h.h2('HeaderBar Left'),
                    right='HeaderBar right'), hr, 'zoom.components.spinner',
        h.div(c.spinner(),
              classed="clearfix",
              style="margin: 40px auto; width: 0;"), hr,
        'zoom.components.dropzone', c.dropzone('/sample/components'), hr,
        use_common_package('not updated yet'))

    return zoom.page(content, title='Components')
예제 #17
0
    def index():
        """app index"""
        event_log = list(
            zoom.system.site.db('''
            select
                log.message, log.timestamp
            from
                log join users on log.user_id = users.id
            where log.app = "content" and log.status = 'A'
            order by log.timestamp desc
            limit 10;
        '''))
        parsed_log = list()
        for row in event_log:
            parsed_log.append((row[0], how_long_ago(row[1])))

        parsed_log.insert(0, ('Event', 'When'))
        content = zoom.browse(parsed_log, title='Recent Activity')
        return zoom.page(
            content,
            title='Overview',
        )
예제 #18
0
    def index(self):
        """Returns a list of background jobs"""

        actions = []
        if zoom.system.user.is_admin:
            actions.append(('Clear Placeholders', 'jobs/clear'))

        jobs = zoom.sites.Site(zoom.system.site.path).background_jobs
        lookup = {
            job.qualified_name: job
            for job in zoom.store_of(zoom.background.BackgroundJobPlaceholder)
        }

        when = zoom.helpers.when

        labels = ('Name', 'Status', 'Trigger', 'Next Run', 'Last Run',
                  'Elapsed', 'Last Run Status')

        content = zoom.browse(
            ((job.name, job.status, job.trigger, when(job.next_run),
              when(
                  lookup.get(job.qualified_name)
                  and lookup.get(job.qualified_name).last_run) or 'never',
              timespan(
                  lookup.get(job.qualified_name).last_finished
                  if job.qualified_name in lookup else None,
                  lookup[job.qualified_name].last_run
                  if job.qualified_name in lookup else None,
              ), lookup[job.qualified_name].last_run_status
              if job.qualified_name in lookup
              and lookup[job.qualified_name].last_run_status else '-')
             for job in jobs),
            labels=labels,
        )

        title = 'Jobs'
        return zoom.page(content, title=title, actions=actions)
예제 #19
0
def user_activity_logs(user, weeks=12):
    """gathers log information for the user

    The activity logs are comprised of both the user
    activities within the system and the authorization
    activities related to the user as captured in the
    audit logs.

    Note that the system log entries are host specific
    so this app displays the activities for the host
    it is on.  However, audit logs are not host specific
    as hosts sometimes share authozation databases and
    thus changes in authorizations affect all hosts
    using that database.
    """

    max_len = 50
    websafe = zoom.tools.websafe

    db = zoom.system.site.db
    when = zoom.helpers.when
    who = zoom.helpers.who

    auth_data = db(
        """
    select *
    from audit_log
    where
        (subject1=%s or subject2=%s)
    order by timestamp desc
    limit 20
    """, user.username, user.username)
    labels = 'App', 'User', 'Activity', 'Subject1', 'Subject2', 'When'
    auth_activity = zoom.browse(
        [(a[1], who(a[2]), a[3], a[4], a[5], when(a[6])) for a in auth_data],
        labels=labels)

    activity_data = db(
        """
            select
                id, timestamp, path, status, address, elapsed, message
            from log
            where
                user_id=%s
                and server=%s
            order by timestamp desc
            limit 50
        """, user.user_id, zoom.system.request.host)
    labels = ('id', 'Path', 'Status', 'Address', 'When', 'Elapsed', 'Message')
    activity = zoom.browse([(zoom.helpers.link_to_page(
        a[0], 'entry', a[0]), a[2], a[3], a[4], zoom.helpers.when(
            a[1]), a[5], a[6] if a[3] == 'A' else websafe(a[6][:max_len]))
                            for a in activity_data],
                           labels=labels)

    return """
    <h2>Most Recent Authorizations Activity</h2>
    %s
    <h2>Most Recent User Activity</h2>
    %s
    """ % (auth_activity, activity)