ron santos simon fraser university ron santos simon fraser university stats all folks! extracting...

20
Ron Santos Simon Fraser University Stats all folks! Extracting usable statistics from Blackboard Vista using the Powersight Module and a little elbow grease

Upload: colleen-logan

Post on 27-Dec-2015

214 views

Category:

Documents


0 download

TRANSCRIPT

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)

Tool Distribution (RPT_TRACKING)

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

Google Analytics

• Browser information & usage (monthly view)

Google Analytics

• OS information & usage (monthly view)

Google Analytics

• Many other “useful” information

• Email: [email protected]

• Who wants to print out a handout? Instead, check out my presentation on http://get.sfu.ca/bbworld09

Questions?