65.9K
CodeProject 正在变化。 阅读更多。
Home

SSMonitor - 使用 VBScript 监视 Visual SourceSafe 数据库

starIconstarIconstarIconstarIconstarIcon

5.00/5 (22投票s)

2003年5月2日

9分钟阅读

viewsIcon

203633

downloadIcon

1983

一个 VBScript 工具,可持续监视 VSS 数据库并在检测到特定模式时发送电子邮件。可以作为 NT 服务运行。

SSMonitor 简介

SSMonitor 是一个免费的 Windows 脚本工具,用于监视 Visual SourceSafe 日志文件中的活动。可以定义各种事件模式过滤器,并在这些事件发生时发送电子邮件通知开发人员。

我们使用 SSMonitor 每天发送 VSS 活动的摘要报告,并将重要事件(如文件删除或项目构建设置更改)广播给所有开发人员。恕我直言,这些功能 VSS 从一开始就应该具备,但别让我多说。:-)

SSMonitor 设计为在任何能够访问 SourceSafe 日志文件的机器上的控制台窗口中运行。不使用 VSS 自动化组件,也不需要 VSS 许可证。SSMonitor 可以作为 NT 服务运行。

本文的前半部分介绍了如何安装和使用 SSMonitor,后半部分介绍了用于实现 SSMonitor 的一些 VBScript 代码。

第一部分 - 安装和使用 SSMonitor

SSMonitor 功能

  • 监视 VSS 日志文件中的用户定义的事件模式,并在检测到事件时发送电子邮件通知。
  • 电子邮件可以发送为纯文本(丑陋)或 HTML(不那么丑陋,可能很大胆?)。
  • 可以通过 VSS 活动(例如,签入、移动等)和/或项目模式(例如,“*.cpp”或“\myproject\folder”)过滤事件。
  • 事件可以有报告周期,允许将多个相似事件报告在同一封电子邮件中。这有助于减少脚本生成的噪音
  • 每个事件定义都可以拥有自己的目标电子邮件地址(如果需要)。
  • SSMonitor 的所有配置数据均来自一个 XML 文件,SSMonitor 在运行时也会监视该文件。如果您在 SSMonitor 运行时更改 XML 文件,所有缓存的事件都会被发送出去,并加载新的 XML 配置。无需仅因为更改了配置参数就关闭/重启 SSMonitor。
  • 运行 SSMonitor.wsf 时不带命令行参数(cscript.exe SSMonitor.wsf)会显示一个很大的帮助页面。您需要的大部分内容都可以在那里找到。
  • 当发生某些“重要”事件时,将发送管理员电子邮件
    • SSMonitor 启动或停止时。
    • SSMonitor 因检测到更改而重新加载其配置文件时。
    • SSMonitor 丢失或重新获得对 VSS 日志文件的访问权限时。
  • SSMonitor 可以使用 Windows Resource Kit 中免费的 SRVANY.EXEINSTSRV.EXE 工具作为 NT 服务运行。

要求

  • Windows Scripting Host 5.6 或更高版本。已在 Win2K Pro SP3 和 XP Pro SP1 上进行测试。如果您运行的是 Win2K 或 XP,很可能已经安装了 WSH 5.6。
  • 访问 Visual SourceSafe 数据库的日志文件。您的 VSS 数据库必须配置为将所有活动记录到日志文件中。这在 srcsafe.ini 的 Journal_File= 设置中配置。有关详细信息,请参阅 VSS 文档。
  • SSMonitor 使用 Ostrosoft 的免费 SMTP 控件,在此处可用。感谢 OstroSoft!

安装

  1. 将 SSMonitor.zip 存档解压缩到一个文件夹。本文档假定存档已提取到 C:\Program Files\SSMonitor
  2. 在 XML 文件中配置适当的参数。您可以将提供的 config.xml 用作模板。
  3. 要安装 SMTP.ocx,请按照 OstroSoft 的说明进行操作(此处为方便起见复制)。
    1. 下载 SMTP.zip
    2. 从其中将 SMTP.ocx 解压缩到 Windows System 目录。
    3. 从命令行运行“regsvr32 SMTP.ocx”。

将 SSMonitor 作为控制台应用程序运行

只需使用控制台脚本引擎运行脚本。确保提供 /ConfigFile:yourConfigFile.xml 参数。如果没有,不用担心,脚本会不断提示您输入所有正确的参数。以下命令应该可以实现。

cscript.exe "C:\Program Files\SSMonitor\SSMonitor.wsf" 
/ConfigFile:"C:\Program Files\SSMonitor\config.xml"

将 SSMonitor 作为 NT 服务运行

我建议将 SSMonitor 作为 NT 服务运行,但前提是您已在其站点上调试了其配置和部署,并在交互式登录帐户下运行 SSMonitor 作为控制台应用程序。虽然 SSMonitor 通过电子邮件提供了相当多的通知,但如果您的 SMTP 电子邮件配置未经测试,您将无法获得有关服务配置错误的任何可用反馈。

SSMonitor 可以作为 NT 服务运行(这也是我们的团队当前部署它的方式)。Microsoft 提供的免费 Windows Resource Kit 包含两个有用的工具,可以轻松地将任何控制台应用程序设置为服务。不幸的是,Resource Kit 中关于 INSTSRV 和 SRVANY 的文档有点 sparse。

这是您需要做的

  • 假设:SSMonitor.zip 存档已提取到 C:\Program Files\SSMonitor
  • 假设:cscript.exe 工具已安装在 C:\WINDOWS\system32\cscript.exe
  • 假设:INSTSRV.EXESRVANY.EXE 工具已安装在 C:\Program Files\Windows Resource Kits\Tools
  • 将 SRVVANY 程序安装为一个名为 SSMonitor 的服务。
    instsrv SSMonitor "C:\Program Files\Windows Resource Kits\Tools\srvany.exe"
  • 使用 REGEDITSRVANY 添加启动参数。这是 Microsoft 忘记记录的部分!

    需要添加 3 个注册表项,如下所示:

    REGEDIT4
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SSMonitor\
    Parameters] "Application"="C:\\WINDOWS\\system32\\cscript.exe" "AppParameters"="C:\\Program Files\\SSMonitor\\SSMonitor.wsf
    /ConfigFile:C:\\Program Files\\SSMonitor\\config.xml" "AppDirectory"="C:\\Program Files\\SSMonitor"

示例配置 XML

下面提供的示例 XML 文件是我们运行在我们 VSS 数据库上的 XML 配置的已清理版本。我更改了一些服务器和电子邮件地址的名称,但其他部分都是逐字逐句的。

此配置监视日志文件中的三种事件模式:

  • 检测已删除文件 - 事件模式,用于监视任何文件删除/销毁/清除操作,并在 5 分钟后报告它们。此模式有助于提醒其他开发人员,他们本地的工作文件夹现已过时,需要手动修复(即,其他开发人员必须手动删除刚刚被销毁的文件)。
  • 构建设置 - 事件模式,用于查找 DevStudio .DSP 和 .DSW 文件的更改。同样,此模式有助于让其他开发人员“警惕”,他们的下一次构建可能会失败,除非他们进行新的获取。
  • 每日活动报告 - 事件模式,每天运行一次,并发送过去 24 小时内发生更改的列表。

注意事项

  • 电子邮件标题和页脚可以跨越多行。这允许您格式化电子邮件。
  • 通用的电子邮件选项在 <smtp> 节点中指定。这些设置是任何模式的默认值,但任何模式都可以根据需要覆盖默认值。
  • 电子邮件的消息正文始终是:<smtp.emailHeader> + <pattern.emailHeader> + 所有匹配的事件 + <pattern.emailFooter> + <smtp.emailFooter>。此格式提供了最大的灵活性。
  • HTML 格式的电子邮件可以在标题和页脚中包含 HTML 标记,但我对此测试不多。
<?xml version="1.0" ?>
<config>
    <!-- UNC path to VSS database journal file -->
    <database
        journalFile="\\MyServer\MySourceSafeShare\VSS-Log\sources.log"
        monitorPeriodSeconds="30"
        networkShare="\\MyServer\MySourceSafeShare"
        networkDrive="S:"
        networkUser="domain\user"
        networkPassword="pass"
     /> 
    
    <!-- SMTP server properties -->
    <smtp
        serverName="server.mydomain.com"
        emailSource="SSMonitor@mydomain.com"
        emailDest="Joe.Developer@mydomain.com,Sue.Developer@mydomain.com,_
Some.Manager@mydomain.com" emailHeader="" emailFooter="If this email is annoying you, see the adminstrator. No animals were harmed during the automatic formatting of this message." formatAsHtml="1" adminEmail="Big.Geek@mydomain.com,Little.Geek@mydomain.com" /> <!-- List of VSS event patterns to monitor --> <patterns> <pattern name="Detect deleted files" eventFilter="deleted,destroyed,purged,created" pathFilter="" emailSubject="WARNING: Stale working folders" emailHeader="
Warning: Critical SourceSafe operations were performed that may
leave your working folders out of date! Check your working folders to ensure that no stale copies remain. You have been warned! The following files were removed or relocated:" emailFooter="" reportPeriodMinutes="5" /> <pattern name="Build settings" eventFilter="Checked In" pathFilter="\.ds[wp]$" emailSubject="Build change settings detected" emailHeader="Change in build settings detected. Your " &_
"mileage may vary." emailFooter="" reportPeriodMinutes="5" /> <pattern name="Daily activity" eventFilter="" pathFilter="" emailSubject="Daily activity report" emailHeader="The following SourceSafe changes were detected "&_
"during the past 24 hours." emailFooter="" fixedReportTime="9:00 PM" /> </patterns> </config>

第二部分 - 理解 SSMonitor 代码

背景

我写 SSMonitor 是因为我当时很生气。算是吧。

我开始在一个多站点项目上工作,波士顿有一个开发团队,温哥华有一个开发团队。由于地理分隔,我们团队需要某种通知工具来让其他开发人员了解代码库的重要更改。我在网上找到了一款付费产品,它具备 SSMonitor 的所有功能,但其定价令人难以置信。对于我们 30 名开发人员组成的团队,他们索要约 2500 美元来获得此功能。我简直不敢相信。他们的产品经理试图向我推销“他们多年的 VSS 专业知识和产品的稳定性”,但我只是说“胡说!我可以在几个小时内写出这样的东西”。我挂了电话,大约两个小时后,我在从波士顿飞往温哥华的 6 小时航班上开始编写 SSMonitor。

飞机着陆时,我已经学到了足够的 VBScript 来编写能够监视和解析 VSS 日志文件的代码,到第二天,SSMonitor 已经开始向整个团队发送电子邮件了。写完整个项目是否花了不止“几个小时”?当然!我是一名程序员!您真的相信我最初的估计吗?也许如果 空中客车 A320 飞机有 WiFi 网络 和 SMTP 服务器,我可能在飞行中就完成了整个项目:-) 但它仍然比付费产品的 2500 美元价格便宜,所以经济效益仍然合理。此外,在多年成为 CodeProject 的快乐用户之后,我现在有了在 CodeProject 上发布有用内容的理由!

学习 VBScript 和 Windows Scripting Host

我是一名 C++ 死忠,但我也写过一些 VB。有时我甚至为此拿到过报酬!在使用 Kinook Software 出色的 VisualBuild Pro 工具设置每日构建时,我已经在开始使用 VBScript 了。我很有信心,可以写一个 VBScript 片段来解析 VSS 日志文件。

我发现 VBScript 是一个非常强大的工具,它允许我像 C++ 一样创建类对象。由于 SSMonitor 是我的第一个重要的 VBScript 项目,我相信代码会有 C++ 的风格。不知道是好是坏。:-)

Visual SourceSafe 日志文件格式

Visual SourceSafe 可以配置为维护一个数据库所有活动的日志文件。通过在数据库的 SrcSafe.ini 文件中设置 Journal_File=myjournalfile.log 来启用此功能。

每次 VSS 客户端执行操作后,客户端也会将操作的简单文本描述追加到日志文件中。每个条目具有以下格式:

$/SomePath/SomeObjectName.ext
Version: x
User: VssAccountName   Date: mm/dd/yy  Time: hh:mm[ap]
Action
Comment: Comment text
Further comment text follows on subsequent lines
(ends with blank line)

编写一个解析器来处理这种简单的文本格式相当直接,由 SSMON_CVssJournalParser.Parse( in_strFileName, in_nByteOffset ) 方法处理。

主监视循环

SSMonitor 的主循环相当简单。

  • 从 XML 配置文件加载所有模式和参数。Sub SSMON_LoadConfigFile( ByVal in_strFilename )
  • 监视数据库Sub SSMON_MonitorDb
  • 获取日志文件的当前文件大小。Function SSMON_GetFileSize( ByVal in_strFilename )
  • 检查日志文件大小是否已更改。如果已更改,则
  • 解析日志文件中的所有新添加的记录。Sub SSMON_CVssJournalParser.Parse( in_strFileName, in_nByteOffset )
  • 将每个新解析的记录与模式数组进行比较。任何匹配记录的模式都会缓存该记录以供稍后通过电子邮件发送。Sub SSMON_CVssJournalParser.ProcessEvent
  • 稍作暂停。
  • 检查所有模式以查看其发送电子邮件的时间是否已过期。根据需要发送任何电子邮件。Sub SSMON_CMonitorPattern.FlushCacheIfExpired( in_smtpServer )
  • 重复此过程。

历史

2002-09-01 初始发布(已在网上其他地方发布)。

2003-05-02 首次发布到 CodeProject。现支持固定时间电子邮件、管理员电子邮件和多格式日期字符串。

© . All rights reserved.