200 likes | 351 Views
Stats all folks! Extracting usable statistics from Blackboard Vista using the Powersight Module and a little elbow grease. Ron Santos Simon Fraser University. What will you learn in this session?.
E N D
Stats all folks! Extracting usable statistics from Blackboard Vista using the Powersight Module and a little elbow grease Ron Santos Simon Fraser University
What will you learn in this session? • 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
Simon Fraser University • 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 Fraser 1776 -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
Course Growth Graph SELECT 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 Students SELECT 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 Graph SELECT 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 Graph SELECT 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)
Other uses 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>'
Perl modules • 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.pmhttp://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 • Sample access configuration for the DBI proxy server (/etc/dbiproxy.cfg) { 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' ], }, • # 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, • } • ] • }
Perl modules • Basic Perl script • 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."); • Run SQL my $sth = $dbh -> prepare( $sql); $sth -> execute(); while ( @row = $sth -> fetchrow_array ) { push ( @return, @row); } • Store SQL results into a CSV file • Parse CSV file using Text::CSV::Simple my $parser = Text::CSV::Simple->new(); my @data = $parser->read_file($file);
Perl modules 5. Graph CSV using GD::Graph my $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;
Google Analytics • 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 • Browser information & usage (monthly view)
Google Analytics • OS information & usage (monthly view)
Google Analytics • Many other “useful” information
Questions? • Email: santos@sfu.ca • Who wants to print out a handout? Instead, check out my presentation on http://get.sfu.ca/bbworld09