Date post: | 27-Dec-2015 |
Category: |
Documents |
Upload: | colleen-logan |
View: | 214 times |
Download: | 0 times |
Ron SantosSimon Fraser University
Ron SantosSimon Fraser University
Stats all folks! Extracting usable statistics from Blackboard
Vista using the Powersight Module and a little elbow grease
Stats all folks! Extracting usable statistics from Blackboard
Vista using the Powersight Module and a little elbow grease
• Sample Graphs using the Powersight tables (e.g. course growth, student distribution, tool distribution)
• Sample SQL used to generate the reports
• Other uses (beyond graphs and stats)
• Perl modules
• Google Analytics
Presentation available at http://get.sfu.ca/bbworld09
What will you learn in this session?
• Named after famous explorer• Opened on September 9, 1965• Located on British Columbia, Canada• One University - Three campuses
– Burnaby– Vancouver– Surrey
• 900 faculty• 1600 staff• 100,000 alumni
Simon Fraser1776 -1862
Simon Fraser University
• Student Enrollments (Fall2008)
• Products used: Peoplesoft, LDAP/CAS3, Blackboard Vista 8.0.2• Blackboard/WebCT history
CE3 CE4 CE6 Vista4 Vista8
2000 2003 2006 2007 2008
• Blackboard Vista setup– 6 Managed nodes (1 protected JMS server)– Oracle 10g (~500GB)– Sun Sparc Solaris 10
Simon Fraser University
Unique students in at least 1 class
Total student enrollments in courses
Undergraduates 22,822 73,535
Graduates 4,258 7,726
Course Growth GraphSELECT
source_name, source_id
FROM
rpt_learning_context
WHERE
ims_value = 'SECTION'
AND
source_id LIKE '<semCode>-%'
sourced.id = <semCode>-<courseName>-<courseNumber>-<courseSection> (e.g. 1094-math-100-d100)
Number of Unique StudentsSELECT
COUNT (DISTINCT p.person_id)
FROM
rpt_learning_context lc, rpt_member m, rpt_person p
WHERE lc.learning_context_id = m.learning_context_id
AND p.person_id = m.person_id
AND m.active = 1
AND m.role = 'SSTU'
AND p.demo_user = 0
AND lc.source_id LIKE '$semCode-%'
sourced.id = <semCode>-<courseName>-<courseNumber>-<courseSection> (e.g. 1094-math-100-d100)
Course Levels GraphSELECT
COUNT(*)
FROM
rpt_learning_context
WHERE
ims_value = 'SECTION'
AND
source_id LIKE '$semCode-%-d1%'
sourced.id = <semCode>-<courseName>-<courseNumber>-<courseSection> (e.g. 1094-math-100-d100)
Student Levels GraphSELECT
COUNT(DISTINCT p.person_id)
FROM
rpt_learning_context lc, rpt_member m, rpt_person p
WHERE lc.learning_context_id = m.learning_context_id
AND p.person_id = m.person_id
AND m.active = 1
AND p.demo_user = 0
AND m.role = 'SSTU'
AND lc.source_id LIKE '$semCode-%-d1%'
sourced.id = <semCode>-<courseName>-<courseNumber>-<courseSection> (e.g. 1094-math-100-d100)
SELECT
(SELECT lc2.name FROM rpt_learning_context lc2 WHERE b.learning_context_id = lc.parent_learning_context_id) as Parent,
lc.name,
lc.source_name,
lc.source_id
FROM rpt_learning_context lc, rpt_member m, rpt_person p
WHERE lc.learning_context_id = m.learning_context_id
AND p.person_id = m.person_id
AND m.role = 'SDES'
AND lc.ims_value = 'SECTION'
AND m.active = 1
AND p.source_name = '<sourced.id_source>'
AND p.source_id = ’<sourced.id_id>'
Other uses
• Application level– DBI - http://dbi.perl.org/
• DBI stands for database interface• Allows Perl of running SQL queries
– Text::CSV::Simple - http://search.cpan.org/~tmtm/Text-CSV-Simple-1.00/lib/Text/CSV/Simple.pm
• Parser for CSV files
– GD::Graph - http://search.cpan.org/~bwarfield/GDGraph-1.44/Graph.pm
• Graphing module for Perl5
Perl modules
• Database level– DBD::Proxy driver
-http://search.cpan.org/~timb/DBI-1.609/lib/DBI/ProxyServer.pm http://docstore.mik.ua/orelly/linux/dbi/ch08_02.htm
• Module for implementing a proxy for the DBI proxy driver• Allows PERL access to a database over the network• DBI proxy architecture allows for on-the-fly compression of query and result
data, and also encryption of that data. These two facilities make DBI a powerful tool for pulling large results sets of data over the network
– dbiproxy • A proxy server for the DBD::Proxy driver
• This tool is just a front end for the DBI::ProxyServer package
• /usr/local/bin/dbiproxy --configfile /etc/dbiproxy.cfg
– Perl DBD::Oracle - http://search.cpan.org/~pythian/DBD-Oracle-1.23/Oracle.pm
• Oracle database driver for the DBI module
Perl modules
{
facility => 'daemon',
pidfile => '/var/dbiproxy/dbiproxy.pid',
user => 'nobody',
group => 'nobody',
localport => '3333',
mode => 'fork',
user => 'nobody',
group => 'nobody',
# Access control
clients => [
# Accept the local LAN ( 192.168.1.* )
{
mask => '^192\.168\.1\.\d+$',
accept => 1,
users => [ 'wctsupport' ],
},
Perl modules
# Accept our off-site machines ( 192.168.2.* ) but with a cipher
{
mask => '^192\.168\.2\.\d+$',
accept => 1,
users => [ 'wctsupport' ],,
cipher => Crypt::IDEA->new( 'be39893df23f98a2' )
},
# Deny everything else
{
# any IP-address is meant here
mask => '^(\d+)\.(\d+)\.(\d+)\.(\d+)$',
accept => 0,
}
]
}
• Sample access configuration for the DBI proxy server (/etc/dbiproxy.cfg)
• Basic Perl script
1. Connect to DB (via DBI Proxy) $dsn = "DBI:Proxy:hostname=$hostname;port=$port;dsn=DBI:Oracle:$sid";
$dbh = DBI -> connect($dsn, $user, $passwd) || die ("Database connection failed.");
2. Run SQL my $sth = $dbh -> prepare( $sql);
$sth -> execute();
while ( @row = $sth -> fetchrow_array ) {
push ( @return, @row);
}
3. Store SQL results into a CSV file
4. Parse CSV file using Text::CSV::Simplemy $parser = Text::CSV::Simple->new();
my @data = $parser->read_file($file);
Perl modules
5. Graph CSV using GD::Graphmy $graph = GD::Graph::linespoints->new(600, 500);
$graph->set(
x_label => 'Year',
x_label_position => 0.5,
y_label => 'Course Per Semester',
title => 'WebCT Course Growth',
y_max_value => 700,
y_tick_number => 7,
zero_axis_only => 0,
zero_axis => 0,
show_values => 1,
markers => [1, 5, 8],
marker_size => 3,
skip_undef => 1,
transparent => 0,
) or die $graph->error;
my $format = $graph->export_format;
open (IMG, ">$image") or die ("Error creating $image\n");;
binmode IMG;
print IMG $graph->plot(\@data)->$format();
close IMG;
Perl modules
• Require Google account• Need custom entry page for Blackboard• Simply put the tracking code (JavaScript) immediately before the
</body> tag of each page you want to track (entry page, login, logout)– Example tracking code
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try{
var pageTracker = _gat._getTracker("UA-xxxxxx-x");
pageTracker._trackPageview();
} catch(err) {}
</script>
• Does not track SSO logins (e.g. logins from portals)• Personally identifiable info are not tracked (username and IP address)• Provides nice graphs and reports that can be exported & emailed
Google Analytics
• Email: [email protected]
• Who wants to print out a handout? Instead, check out my presentation on http://get.sfu.ca/bbworld09
Questions?