【网盘项目日志】20210531:Seafile 审计系统开发日志

备注:本博客编写时,系统本身已经完成,本博客为补档内容。

书接上回

当时搞 Virus Scan 搞到自闭了嘛(就是被连续封号 10 小时那段时间),然后看到 seafevents 里面还包含了审计系统,那就顺便弄了啦。

前端问题

老问题,还是 isPro 限制的,前面说了无数次了,这里就不说了。

权限问题

放开前端界面以后,发现所有界面都爆权限错误(403),看 Web 控制台输出发现是 403 错误,而 seahub 后台也报告了相应错误。

根据 urls.py 中指向的 View,又看到了跟病毒扫描接口里面一模一样的 IsProVersion 类限制,总共有 5 处,全部删掉。

permission_classes = (IsAdminUser, IsProVersion)

第一次调试

现在接口也可以访问了,但是打开以后,所有的数据都为 0。我尝试登录用户,创建文件,但是依然是 0。看来,不能那么草率进行简单处理了。

研究机制

经过我的研究,公布我所了解到的信息:

  1. seafevents 除了可以运行定时任务,还可以接受来自 seahub 的 “events”。例如,有用户登录了,有用户下载文件了,等等。
  2. seafevents 中的审计系统存储逻辑是(以上传文件为例):事件系统监听,当有用户上传文件时,系统会先将相关数据信息存储在 seafevents 进程中的一个变量中,然后每隔 1 小时将变量中的内容集中存入数据库中。
  3. seafevents 收集的行为:用户登录、用户上传文件、下载文件、通过公开链接上传文件、通过公开链接下载文件、同步客户端上传文件、同步客户端下载文件。
  4. 与用户活跃度(Traffic)相关的行为:所有上传和下载行为,不包括用户登录

从我们收集到的信息,不难得出以下结论:

  1. 要使审计系统正常运行,必须时刻运行 seafevents 进程。
  2. 审计系统类似于一套带有 Cache 机制的数据存取,这是 Seafile 考虑到了频繁向数据库插入导致的性能问题。但是,定时插入系统导致审计数据并非实时更新,而且在 seafevents 进程意外退出时,其未保存的数据将全部丢失。

第二次调试

其实感觉没有对它原本的机制做太多修改,只是确认了操作方式。不过在调试过程中,发现其他数据在经过正确操作以后,都能够正常使用了,唯独占用空间的统计一直不行。翻看日志发现:

[2021-05-30 15:59:23,237] [WARNING] [TotalStorageCounter] Failed to get total storage occupation: OrgRepo

我很疑惑啊,不过我找到了引发问题的代码段:

try:
    RepoSize = SeafBase.classes.RepoSize
    VirtualRepo= SeafBase.classes.VirtualRepo
    OrgRepo = SeafBase.classes.OrgRepo

    q = self.seafdb_session.query(func.sum(RepoSize.size).label("size"),
                                  OrgRepo.org_id).outerjoin(VirtualRepo,\
                                  RepoSize.repo_id==VirtualRepo.repo_id).outerjoin(OrgRepo,\
                                  RepoSize.repo_id==OrgRepo.repo_id).filter(\
                                  VirtualRepo.repo_id == None).group_by(OrgRepo.org_id)
    results = q.all()
except Exception as e:
    self.seafdb_session.close()
    self.edb_session.close()
    logging.warning('[TotalStorageCounter] Failed to get total storage occupation: %s', e)
    return

我添加了一些中间结果,发现,下面这条语句:

OrgRepo = SeafBase.classes.OrgRepo

没有被正常执行,抛出了异常。我没有见过这种写法,而且用 IDEA 直接定位是无法找到东西的。但是结合上下文,我推断这条语句是用来在数据库中定位到指定数据表的。不过一开始我形成了一些思维定势,我直接去 seahub 数据库中找对应的表格,但是。。。前面的 RepoSizeVirtualRepo 也找不到。。。但是下面那个 query 语句又让我坚信它一定与数据库对应。

经过了一段时间查找,我发现原来它应该在 seafile 数据库中。。。不管怎么说应该还算好解决,因为在 pro 的软件包里面也附带了 seafile 数据库的定义。于是我直接在 C 代码的运行检查中添加了以下代码:

sql = "CREATE TABLE IF NOT EXISTS OrgRepo ("
      "org_id int, "
      "repo_id char(36), "
      "user varchar(255), "
      "PRIMARY KEY (org_id,repo_id), "
      "UNIQUE (repo_id))"
      "ENGINE=INNODB;";
if (seaf_db_query (db, sql) < 0)
    return -1;

编译,重新运行,数据表就会被自动建立好了,再次运行 seafevents 脚本,OrgRepo 的警告输出也消失了。到 seahub 的管理界面上,发现使用量也正常显示了:

在这里插入图片描述

OK,审计系统也完成了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 实战OpenGL三维可视化系统开发与源码精解是一本介绍使用OpenGL技术开发三维可视化系统的书籍,其中包含了源码解析和开发实例。本书的目的是帮助读者理解OpenGL的基本原理和使用方法,并通过实际案例展示如何应用OpenGL进行三维可视化系统开发。 这本书适合对计算机图形学和OpenGL有一定了解的读者。作者通过详细讲解OpenGL的基本概念和渲染管线的工作原理,帮助读者建立起对OpenGL的整体认识。并通过实例代码和源码解析,演示了如何使用OpenGL进行三维场景的渲染、纹理贴图、光照计算等操作。 同时,本书还介绍了一些常用的图形学算法,如曲面细分、几何变换等,以及与OpenGL的结合应用。这些算法的讲解和实现,让读者能够更好地理解OpenGL的高级特性和实现原理。 此外,本书还介绍了如何使用OpenGL进行用户交互,包括键盘鼠标事件的捕获和处理,以及基本的图形操作,如平移、旋转、缩放等。这些内容对于实现实时三维可视化系统非常重要。 最后,本书提供了一些实际项目案例,如三维建模、科学数据可视化等,以帮助读者更好地应用所学知识。通过这些案例的学习,读者可以进一步掌握OpenGL的应用技巧和开发方法。 综上所述,实战OpenGL三维可视化系统开发与源码精解是一本内容丰富、实用性强的图形学开发指南。通过阅读这本书,读者可以深入理解OpenGL的原理和应用,掌握三维可视化系统开发方法,并具备独立开发类似系统的能力。 ### 回答2: 对于实战OpenGL三维可视化系统开发与源码精解,目前在网盘上可能会有相关资源提供下载。这本书主要介绍了使用OpenGL进行三维可视化系统开发,同时还深入解析了相关的源码。 在开发过程中,OpenGL是一种常用的图形库,可用于生成高质量的三维图形。这本书详细介绍了OpenGL的基础知识,包括坐标系统、投影、光照等。它还涵盖了常见的三维图形算法和技术,如模型加载、纹理映射、阴影、立体渲染等,以使读者能够理解和应用这些概念。 此外,这本书还通过一些实际案例向读者展示了如何应用OpenGL进行三维可视化开发。通过这些案例,读者可以学习如何创建基本的三维场景,添加对象,并对其进行变换和交互。同时,还介绍了一些高级的可视化技术,例如体绘制、流线绘制等。 对于源码精解部分,这本书还深入解析了一些常见的OpenGL代码示例,帮助读者更好地理解其实现原理。通过逐行分析源码,读者可以学习到OpenGL的底层实现细节,并加深对其工作原理的理解。 总之,实战OpenGL三维可视化系统开发与源码精解是一本非常实用的指南,适合对OpenGL感兴趣并正在进行三维可视化开发的人。通过学习这本书,读者可以了解到OpenGL的基础知识,掌握常见的三维图形算法和技术,并深入理解一些常见的OpenGL代码示例。相信这本书会对读者的OpenGL开发技能提升有很大帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值