SmarterApp Logo
Test Integration Services (TIS) Installation Checklist
2024-03-26 14:03:06 -0400 |

Overview

Item Description
Purpose Integration for assessment scoring
Communicates With ART
Student
Equation Scoring Service
THSS
Repository Location https://github.com/SmarterApp/TDS_TestIntegrationSystem
Additional Documentation TIS REST API
README

Instructions

Create MSSQL RDS Instance

Create TIS Databases

Create TIS Databse User Account(s)

Create the OSS_TIS Database Schema

-- these can be IP or server name
set @IP = '[FQDN or IP address of the database server]'
set @privateIP = '[Private IP address of the database server]' -- can be different if you want to use a private IP
set @dbname = '[Name of the TIS database; use OSS_TIS if following this guide]'
set @scoringDaemonName = '[Name of the TIS Scoring Daemon.  Should match the value in settings.config for ScoringDaemon.MachineName]'
set @itemScoringHost = '[FQDN or IP address of the Item Scoring Server]/itemscoring/Scoring'
set @rubricCallbackHost = 'https://[FQDN or IP address of the Rubric Server]/student/'
-- these can be IP or server name
set @IP = 'tis-deployment2.cugsexobhx8t.us-west-2.rds.amazonaws.com'
set @privateIP = 'tis-deployment2.cugsexobhx8t.us-west-2.rds.amazonaws.com' -- can be different if you want to use a private IP
set @dbname = 'OSS_TIS'
set @scoringDaemonName = 'MyTISScoringDaemon'
set @itemScoringHost = '54.200.55.254:8080/itemscoring/Scoring'
set @rubricCallbackHost = 'https://54.200.55.254/student/'

Create the OSS_TestScoringConfigs Database Schema

Create the OSS_Configs Database Schema

Create the OSS_Itembank Database Schema

-- TODO: set these to the database names you created
set @TDSConfigsDatabaseName = '[Name of the TIS Configuration database; use OSS_Configs if following this guide]'
set @TestScoringConfigsDatabaseName = '[Name of the Test Scoring Configuration database; use OSS_TestScoringConfigs if following this guide]'
-- TODO: set these to the database names you created
set @TDSConfigsDatabaseName = 'OSS_Configs'
set @TestScoringConfigsDatabaseName = 'OSS_TestScoringConfigs'
  1. [\Path\to\TIS Repository]\TDSQAService\OSS.TIS\SQL\TDSItemBank\3_Create_Objects.sql
  2. [\Path\to\TIS Repository]\TDSQAService\OSS.TIS\SQL\TDSItemBank\4_Configuration.sql
  3. [\Path\to\TIS Repository]\TDSQAService\OSS.TIS\SQL\TDSItemBank\5_LoadPackages.sql
  4. [\Path\to\TIS Repository]\TDSQAService\OSS.TIS\SQL\TDSItemBank\6_TestToolConfiguration.sql

    NOTE: The “context” values may not be valuable; they should be treated as sample data (many test names do not match what is available from the SBAC FTP site)

Create AWS Instance

Configure Windows AWS Instance

Configure the Web Server Components

Configure IIS Permissions for the Log Directory

IMPORTANT: Repeat the steps below for each log file directory. If you want applications to write to different log file directories, the IIS_IUSRS must be able to write to the desired directory/directories.

Edit log file directory security

Add IIS_IUSRS

Add IIS_IUSRS

Add Inbound and Outbound Firewall Rules to Allow Communicating with SQL Server

Deploy the TDS Receiver

Build the TDS Receiver

Choose Publish

Create a custom profile

Provide name for custom profile

Choose Publish

Choose Publish

Choose Publish

Deploy the TDS Receiver

Configure a TDS Receiver Website in IIS

Add website within IIS

Add website details

Configure the TDS Receiver Application


  <WebServiceSettings>
    <WebService name="OpenAM" url="https://sso-dev.sbtds.org/auth/oauth2/tokeninfo" />
  </WebServiceSettings>

  <connectionStrings>
    <add name="TDSQC" connectionString="Data Source=tis-deployment.cugsexobhx8t.us-west-2.rds.amazonaws.com;Initial Catalog=OSS_TIS;User id=remoteuser;Password=[redacted]" providerName="System.Data.SqlClient" />
  </connectionStrings>

  <appSettings>
    <add key="LogFilePath" value="C:\inetpub\logs\TISServicesLog.txt"/>
    <add key="AuthTokenCache:MaxSize" value="100"/>
    <add key="AuthTokenCache:PurgeCount" value="9"/>
    <add key="AuthTokenCache:SlidingExpirationMinutes" value="240"/>
  </appSettings>

Deploy the TIS Scoring Daemon

Build the TIS Scoring Daemon

Choose Publish

Create a custom profile

Provide name for custom profile

Choose Publish

Choose Publish

Choose Publish

Deploy the TIS Scoring Daemon

Configure a TIS Scoring Daemon Website in IIS

Add website within IIS

Add website details

Configure the TIS Scoring Daemon

Generate a Machine Key

Add website details

Add website details

Turn Off Application Pool Recycling

Disable Application Pool recycling

Configure Database Connection Information

<?xml version="1.0"?>

<connectionStrings>
    <clear />
    <add name="GEO:Cloud" connectionString="Data Source=tis-deployment.cugsexobhx8t.us-west-2.rds.amazonaws.com;Initial Catalog=OSS_TIS;User id=remoteuser;Password=[redacted]" providerName="System.Data.SqlClient" />
</connectionStrings>

Configure Logging

<?xml version="1.0"?>

<!--
NOTE: For local debugging in DebugView turn on "Capture Global Win32"
-->

<system.diagnostics>

  <trace autoflush="true" indentsize="0" />

  <sharedListeners>
    <add name="sqlTrace" type="TDS.Shared.Logging.TDSTraceListener, TDS.Shared" ><filter type="" /></add>
    <add name="consoleTrace" type="AIR.Common.Diagnostics.OutputDebugStringTraceListener, AIR.Common" ><filter type="" /></add>
    <add name="fileTrace" type="AIR.Common.Diagnostics.FileTraceListener, AIR.Common" filePrefix="TISScoringDaemon" filePath="C:\intepub\logs\" enableUserLogging="false" enableMachineLogging="false" enableDateLogging="false"><filter type="" /></add>
  </sharedListeners>

  <sources>
    <source name="TDSConfig"><listeners><add name="fileTrace" /></listeners></source>
    <source name="TDSSql"><listeners><add name="fileTrace" /></listeners></source>
    <source name="TDSApplication"><listeners><add name="fileTrace" /></listeners></source>
    <source name="TDSRenderer"><listeners><add name="fileTrace" /></listeners></source>
    <source name="TDSAdaptive"><listeners><add name="fileTrace" /></listeners></source>
  </sources>

  <switches>
    <add name="TDSConfig" value="Information, ActivityTracing" />
    <add name="TDSApplication" value="Information, ActivityTracing" />
    <add name="TDSSql" value="Information" /> <!-- , Verbose -->
    <add name="TDSRenderer" value="Information" />
    <add name="TDSAdaptive" value="Information" />
  </switches>

  <!--
  The possible <switches> values are the following:
    * All- Allows all events through.
    * ActivityTracing- Allows the Stop, Start, Suspend, Transfer, and Resume events through.
    * Verbose- Allows Critical, Error, Warning, Information, and Verbose events through.
    * Information- Allows Critical, Error, Warning, and Information events through.
    * Warning- Allows Critical, Error, and Warning events through.
    * Error- Allows Critical and Error events through.
    * Critical- Allows only Critical events through.
    * Off- Does not allow any events through.
  -->

</system.diagnostics>

Configure Settings

<?xml version="1.0"?>

<appSettings>
  <!-- NOTE: if the scoring daemon will be polling for responses to send off for scoring, be sure to
    set the app domain to not recycle....

    Recycling -> Regular Time Interval: 0

    If it's just being used to receive scores back via the HTTP handler (i.e., from THSS), there's no need for this.
    Also, in that case you can bump up the HubTimerIntervalSeconds too.
    -->
  <add key="ScoringDaemon.HubTimerIntervalSeconds" value="90"/>
  <add key="ScoringDaemon.MachineName" value="MyTISScoringDaemonName"/>
  <add key="ScoringDaemon.PendingMins" value="15"/>
  <add key="ScoringDaemon.MaxAttempts" value="5"/>
  <add key="ScoringDaemon.ItemScoringCallBackHostUrl" value="https://myitemscoring.myserver.org/"/>
  <!-- TISScoringDaemon doesn't have access to the item files/rubrics, so all supported item types should be configured here if the Scoring Deamon will be sending requests.  -->
  <add key="ScoringDaemon.ItemFormatsRequiringItemKeysForRubric" value="EQ,GI"/>
  <add key="secureConnectionStrings" value="false"/>
</appSettings>

Deploy the TIS Service

Build the TIS Servcie

Deploy the TIS Service

Configure the TIS Service

ItemTypes Format

The item types string follows a specific format that can be summarized like so: {itemType}:{itemKey},{itemKey}:{isExcludedItems};{itemType}… where only the {itemType} is required.

In it’s simplest form, the string will contain a semicolon separated list of item types that should be sent to this particular target. This would look like: SA;WER;TI.

Including one or more {itemKey}’s limits the items that will be included for this {itemType} to only those listed. So SA;WER;TI:200-25662,200-19678 means that all SA and WER items are included and only item 200-25662 and 200-19678 are included for the TI type.

The last option {isExcludedItems} is a boolean value that defines if the list of {itemKey}’s provided should be included or exceluded. If it isn’t provided it defaults to true, meaning the items are included. Therefore SA;WER;TI:200-25662,200-19678:true means that all SA and WER items are included and all TI items except 200-25662 and 200-19678 will be included.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="WebServiceSettings" type="AIR.Configuration.WebServiceConfig, AIR.Configuration, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true" />
    <section name="AuthorizationSettings" type="AIR.Configuration.AuthorizationConfig, AIR.Configuration, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true" />
    <section name="ItemScoringSettings" type="AIR.Configuration.ItemScoringConfig, AIR.Configuration, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" allowDefinition="Everywhere" allowExeDefinition="MachineToApplication" restartOnExternalChanges="true" />
  </configSections>

  <connectionStrings>
    <add name="ITEMBANK" connectionString="Data Source=tis-deployment2.cugsexobhx8t.us-west-2.rds.amazonaws.com;Initial Catalog=OSS_ItemBank;User id=remoteuser;Password=[redacted]" providerName="System.Data.SqlClient" />
    <add name="TDSQC" connectionString="Data Source=tis-deployment2.cugsexobhx8t.us-west-2.rds.amazonaws.com;Initial Catalog=OSS_TIS;User id=remoteuser;Password=[redacted]" providerName="System.Data.SqlClient" />
  </connectionStrings>

  <WebServiceSettings>
    <!-- configure rest targets; handscoring targets must start with or equal "Handscoring" -->
    <WebService name="HandscoringTSS" url="http://54.200.42.254/api/test/submit" />
    <WebService name="HandscoringTDSUnscored" url="http://54.186.182.136:8084" />
    <WebService name="ART" url="http://54.186.87.166:8080/rest" authSettingName="OAuth" />
    <WebService name="DW1" url="https://myDataWarehouseServer/endpoint" authSettingName="OAuthDW1" />
    <WebService name="DW2" url="https://myOtherDataWarehouseServer/endpoint" authSettingName="OAuthDW2" />
  </WebServiceSettings>

  <AuthorizationSettings>
    <!-- Can configure 1 or more oauth servers/accounts that can be used by WebService settings above -->
    <Authorization name="OAuth" url="https://sso-deployment.sbtds.org/" realm="/sbac" grantType="password" username="prime.user@example.com" password="[redacted]" clientId="pm" clientSecret="[redacted]" passwordEncrypted="false" />
    <Authorization name="OAuthDW1" url="https://myOpenAMserver2/endpoint/" realm="/sbac" grantType="password" username="name@example.com" password="[redacted]" clientId="tis" clientSecret="[redacted]" />
    <Authorization name="OAuthDW2" url="https://myOpenAMserver3/endpoint/" realm="/sbac" grantType="password" username="name@example.com" password="[redacted]" clientId="tis" clientSecret="[redacted]" />
  </AuthorizationSettings>

  <ItemScoringSettings>
    <ItemScoring target="HandscoringTSS"
        callbackUrl="http://54.187.75.133/ItemScoringCallbackRcv.axd"
        itemTypes="SA;WER;TI:200-25662,200-19678,200-6117;EQ:200-19679,200-13312"
        isHandscoringTarget="true"
        batchRequest="true" />
    <ItemScoring target="HandscoringTDSUnscored"
        callbackUrl="http://54.187.75.133/ItemScoringCallback.axd"
        itemTypes="EBSR;EQ:200-19679,200-13312:true;ER;ETC;GI;HT;HTQ;MC;MI;MS;NL;SA;TI:200-25662,200-19678,200-6117:true;TUT;WER;WIT"
        scoreStatuses="WaitingForMachineScore" />
  </ItemScoringSettings>

  <appSettings>
    <add key="ServiceName" value="OSS_TISService"/>
    <add key="MaxErrorEMails" value="25"/>

    <add key="FatalErrorsTo" value="tis.admin@example.com"/>
    <add key="FatalErrorsCc" value="tis.admin@example.com"/>
    <add key="EmailAlertForWarnings" value="true"/>
    <add key="WarningsTo" value="tis.admin@example.com"/>
    <add key="WarningsCc" value="tis.admin@example.com"/>

    <add key="ScoringEnvironment" value="TIS" />
    <add key="ClientName" value="SBAC_PT"/>
    <add key="EventLogName" value="OSS_TISEventLog" />
    <add key="EventLogSource" value="OSS_TIS" />
    <add key="ErrorLog" value="C:\inetpub\logs\OSS_TIS_ResultLog.txt"/>

    <add key="SendToHandscoring" value="true"/>
    <add key="IgnoreHandscoringDuplicates" value="true"/>
    <add key="Environment" value="Dev" />

    <add key="IdleSleepTime" value="1000" />
    <add key="LoopSleepTime" value="1" />
    <add key="NumberOfGeneralThreads" value="20"/>
    <add key="WaitForWorkerThreadsOnStopSeconds" value="120"/>
    <add key="LongDbCommandTimeout" value="90" />

    <add key="TDSSessionDatabases" value="server,database;otherserver,otherdatabase"/>
  </appSettings>

  <system.net>
    <defaultProxy>
      <proxy usesystemdefault="False"/>
    </defaultProxy>
    <mailSettings>
      <smtp deliveryMethod="SpecifiedPickupDirectory" from="tis.admin@example.com">
        <specifiedPickupDirectory pickupDirectoryLocation="C:\EmailPickup"/>
      </smtp>
    </mailSettings>
  </system.net>
</configuration>

Set OSS_TISService to auto start

Verification - TIS Service

Permission Settings

back to Deployment Checklists

As of Fall 2018 the Smarter Balanced Test Delivery System (TDS) is no longer supported.

The code base and documentation for the TDS is available within the Smarter Balanced GitHub repository.

Creative Commons License Unless stated otherwise, all content on SmarterApp.org is licensed under a Creative Commons Attribution 4.0 International License.