├── .gitignore ├── Udacity-DEND-C3-Project3-ERD-20190517v1.png ├── Udacity-DEND-C3-Project3-LogDataExample-20190504.png ├── data ├── song_data │ └── A │ │ ├── B │ │ ├── C │ │ │ ├── TRABCTK128F934B224.json │ │ │ ├── TRABCEI128F424C983.json │ │ │ ├── TRABCPZ128F4275C32.json │ │ │ ├── TRABCRU128F423F449.json │ │ │ ├── TRABCUQ128E0783E2B.json │ │ │ ├── TRABCAJ12903CDFCC2.json │ │ │ ├── TRABCEC128F426456E.json │ │ │ ├── TRABCXB128F4286BD3.json │ │ │ ├── TRABCYE128F934CE1D.json │ │ │ ├── TRABCKL128F423A778.json │ │ │ ├── TRABCFL128F149BB0D.json │ │ │ └── TRABCIX128F4265903.json │ │ ├── A │ │ │ ├── TRABAZH128F930419A.json │ │ │ ├── TRABACN128F425B784.json │ │ │ ├── TRABATO128F42627E9.json │ │ │ ├── TRABAXL128F424FC50.json │ │ │ ├── TRABAXV128F92F6AE3.json │ │ │ ├── TRABAFJ128F42AF24E.json │ │ │ ├── TRABAWW128F4250A31.json │ │ │ ├── TRABAVQ12903CBF7E0.json │ │ │ ├── TRABAIO128F42938F9.json │ │ │ ├── TRABAXR128F426515F.json │ │ │ └── TRABAFP128F931E9A1.json │ │ └── B │ │ │ ├── TRABBBV128F42967D7.json │ │ │ ├── TRABBNP128F932546F.json │ │ │ ├── TRABBVJ128F92F7EAA.json │ │ │ ├── TRABBXU128F92FEF48.json │ │ │ ├── TRABBZN12903CD9297.json │ │ │ ├── TRABBTA128F933D304.json │ │ │ ├── TRABBAM128F429D223.json │ │ │ ├── TRABBJE12903CDB442.json │ │ │ ├── TRABBLU128F93349CF.json │ │ │ ├── TRABBKX128F4285205.json │ │ │ ├── TRABBOP128F931B50D.json │ │ │ └── TRABBOR128F4286200.json │ │ └── A │ │ ├── A │ │ ├── TRAAAFD128F92F423A.json │ │ ├── TRAAARJ128F9320760.json │ │ ├── TRAAADZ128F9348C2E.json │ │ ├── TRAAAMQ128F1460CD3.json │ │ ├── TRAAAAW128F429D538.json │ │ ├── TRAAAVG12903CFA543.json │ │ ├── TRAAABD128F429CF47.json │ │ ├── TRAAAEF128F4273421.json │ │ ├── TRAAAVO128F93133D4.json │ │ ├── TRAAAPK128E0786D96.json │ │ └── TRAAAMO128F1481E7F.json │ │ ├── B │ │ ├── TRAABDL12903CAABBA.json │ │ ├── TRAABJL12903CDCF1A.json │ │ ├── TRAABVM128F92CA9DC.json │ │ ├── TRAABXG128F9318EBD.json │ │ ├── TRAABRB128F9306DD5.json │ │ ├── TRAABYW128F4244559.json │ │ ├── TRAABNV128F425CEE1.json │ │ ├── TRAABCL128F4286650.json │ │ ├── TRAABJV128F1460C49.json │ │ ├── TRAABLR128F423B7E3.json │ │ └── TRAABYN12903CFD305.json │ │ └── C │ │ ├── TRAACIW12903CC0F6D.json │ │ ├── TRAACHN128F1489601.json │ │ ├── TRAACCG128F92E8A55.json │ │ ├── TRAACQT128F9331780.json │ │ ├── TRAACZK128F4243829.json │ │ ├── TRAACOW128F933E35F.json │ │ ├── TRAACSL128F93462F4.json │ │ ├── TRAACPE128F421C1B9.json │ │ ├── TRAACFV128F935E50B.json │ │ ├── TRAACNS128F14A2DF5.json │ │ ├── TRAACTB12903CAAF15.json │ │ ├── TRAACLV128F427E123.json │ │ ├── TRAACER128F4290F96.json │ │ └── TRAACVS128E078BE39.json └── log_data │ ├── 2018-11-01-events.json │ ├── 2018-11-25-events.json │ ├── 2018-11-11-events.json │ └── 2018-11-10-events.json ├── songs_json_paths.json ├── dwh_template.cfg ├── LICENSE.md ├── create_tables.py ├── etl.py ├── README.md ├── sql_queries.py └── Udacity-DEND-Project-3-AWS-Setup.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | .DS_Store 3 | .ipynb_checkpoints/* 4 | dwh.cfg 5 | -------------------------------------------------------------------------------- /Udacity-DEND-C3-Project3-ERD-20190517v1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jukkakansanaho/udacity-dend-project-3/HEAD/Udacity-DEND-C3-Project3-ERD-20190517v1.png -------------------------------------------------------------------------------- /Udacity-DEND-C3-Project3-LogDataExample-20190504.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jukkakansanaho/udacity-dend-project-3/HEAD/Udacity-DEND-C3-Project3-LogDataExample-20190504.png -------------------------------------------------------------------------------- /data/song_data/A/B/C/TRABCTK128F934B224.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR558FS1187FB45658", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "40 Grit", "song_id": "SOGDBUF12A8C140FAA", "title": "Intro", "duration": 75.67628, "year": 2003} -------------------------------------------------------------------------------- /data/song_data/A/A/A/TRAAAFD128F92F423A.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARXR32B1187FB57099", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Gob", "song_id": "SOFSOCN12A8C143F5D", "title": "Face the Ashes", "duration": 209.60608, "year": 2007} -------------------------------------------------------------------------------- /data/song_data/A/A/B/TRAABDL12903CAABBA.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARL7K851187B99ACD2", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Andy Andy", "song_id": "SOMUYGI12AB0188633", "title": "La Culpa", "duration": 226.35057, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/C/TRAACIW12903CC0F6D.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARNTLGG11E2835DDB9", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Clp", "song_id": "SOZQDIU12A58A7BCF6", "title": "Superconfidential", "duration": 338.31138, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/B/TRAABJL12903CDCF1A.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARHHO3O1187B989413", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Bob Azzam", "song_id": "SORAMLE12AB017C8B0", "title": "Auguri Cha Cha", "duration": 191.84281, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/B/TRAABVM128F92CA9DC.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARYKCQI1187FB3B18F", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Tesla", "song_id": "SOXLBJT12A8C140925", "title": "Caught In A Dream", "duration": 290.29832, "year": 2004} -------------------------------------------------------------------------------- /data/song_data/A/A/B/TRAABXG128F9318EBD.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARNPAGP1241B9C7FD4", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "lextrical", "song_id": "SOZVMJI12AB01808AF", "title": "Synthetic Dream", "duration": 165.69424, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/A/TRABAZH128F930419A.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR7ZKHQ1187B98DD73", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Glad", "song_id": "SOTUKVB12AB0181477", "title": "Blessed Assurance", "duration": 270.602, "year": 1993} -------------------------------------------------------------------------------- /data/song_data/A/A/A/TRAAARJ128F9320760.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR8ZCNI1187B9A069B", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Planet P Project", "song_id": "SOIAZJW12AB01853F1", "title": "Pink World", "duration": 269.81832, "year": 1984} -------------------------------------------------------------------------------- /data/song_data/A/B/A/TRABACN128F425B784.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARD7TVE1187B99BFB1", "artist_latitude": null, "artist_longitude": null, "artist_location": "California - LA", "artist_name": "Casual", "song_id": "SOQLGFP12A58A7800E", "title": "OAKtown", "duration": 259.44771, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/A/TRABATO128F42627E9.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AROGWRA122988FEE45", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Christos Dantis", "song_id": "SOSLAVG12A8C13397F", "title": "Den Pai Alo", "duration": 243.82649, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/B/TRABBBV128F42967D7.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR7SMBG1187B9B9066", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Los Manolos", "song_id": "SOBCOSW12A8C13D398", "title": "Rumba De Barcelona", "duration": 218.38322, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/B/TRABBNP128F932546F.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR62SOJ1187FB47BB5", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Chase & Status", "song_id": "SOGVQGJ12AB017F169", "title": "Ten Tonne", "duration": 337.68444, "year": 2005} -------------------------------------------------------------------------------- /data/song_data/A/B/C/TRABCEI128F424C983.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARJIE2Y1187B994AB7", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Line Renaud", "song_id": "SOUPIRU12A6D4FA1E1", "title": "Der Kleine Dompfaff", "duration": 152.92036, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/C/TRABCPZ128F4275C32.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR051KA1187B98B2FF", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Wilks", "song_id": "SOLYIBD12A8C135045", "title": "Music is what we love", "duration": 261.51138, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/C/TRABCRU128F423F449.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR8IEZO1187B99055E", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Marc Shaiman", "song_id": "SOINLJW12A8C13314C", "title": "City Slickers", "duration": 149.86404, "year": 2008} -------------------------------------------------------------------------------- /data/song_data/A/B/C/TRABCUQ128E0783E2B.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARVBRGZ1187FB4675A", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Gwen Stefani", "song_id": "SORRZGD12A6310DBC3", "title": "Harajuku Girls", "duration": 290.55955, "year": 2004} -------------------------------------------------------------------------------- /data/song_data/A/A/A/TRAAADZ128F9348C2E.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARKRRTF1187B9984DA", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Sonora Santanera", "song_id": "SOXVLOJ12AB0189215", "title": "Amor De Cabaret", "duration": 177.47546, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/A/TRAAAMQ128F1460CD3.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARD0S291187B9B7BF5", "artist_latitude": null, "artist_longitude": null, "artist_location": "Ohio", "artist_name": "Rated R", "song_id": "SOMJBYD12A6D4F8557", "title": "Keepin It Real (Skit)", "duration": 114.78159, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/B/TRAABRB128F9306DD5.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR1ZHYZ1187FB3C717", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Faiz Ali Faiz", "song_id": "SOILPQQ12AB017E82A", "title": "Sohna Nee Sohna Data", "duration": 599.24853, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/C/TRAACHN128F1489601.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARGIWFO1187B9B55B7", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Five Bolt Main", "song_id": "SOPSWQW12A6D4F8781", "title": "Made Like This (Live)", "duration": 225.09669, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/A/TRABAXL128F424FC50.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARKULSX1187FB45F84", "artist_latitude": 39.49974, "artist_longitude": -111.54732, "artist_location": "Utah", "artist_name": "Trafik", "song_id": "SOQVMXR12A81C21483", "title": "Salt In NYC", "duration": 424.12363, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/C/TRABCAJ12903CDFCC2.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARULZCI1241B9C8611", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Luna Orbit Project", "song_id": "SOSWKAV12AB018FC91", "title": "Midnight Star", "duration": 335.51628, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/A/TRAAAAW128F429D538.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARD7TVE1187B99BFB1", "artist_latitude": null, "artist_longitude": null, "artist_location": "California - LA", "artist_name": "Casual", "song_id": "SOMZWCG12A8C13C480", "title": "I Didn't Mean To", "duration": 218.93179, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/A/TRAAAVG12903CFA543.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARNTLGG11E2835DDB9", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Clp", "song_id": "SOUDSGM12AC9618304", "title": "Insatiable (Instrumental Version)", "duration": 266.39628, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/B/TRAABYW128F4244559.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARI3BMM1187FB4255E", "artist_latitude": 38.8991, "artist_longitude": -77.029, "artist_location": "Washington", "artist_name": "Alice Stuart", "song_id": "SOBEBDG12A58A76D60", "title": "Kassie Jones", "duration": 220.78649, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/C/TRAACCG128F92E8A55.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR5KOSW1187FB35FF4", "artist_latitude": 49.80388, "artist_longitude": 15.47491, "artist_location": "Dubai UAE", "artist_name": "Elena", "song_id": "SOZCTXZ12AB0182364", "title": "Setanta matins", "duration": 269.58322, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/C/TRABCEC128F426456E.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR0IAWL1187B9A96D0", "artist_latitude": 8.4177, "artist_longitude": -80.11278, "artist_location": "Panama", "artist_name": "Danilo Perez", "song_id": "SONSKXP12A8C13A2C9", "title": "Native Soul", "duration": 197.19791, "year": 2003} -------------------------------------------------------------------------------- /data/song_data/A/B/C/TRABCXB128F4286BD3.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARWB3G61187FB49404", "artist_latitude": null, "artist_longitude": null, "artist_location": "Hamilton, Ohio", "artist_name": "Steve Morse", "song_id": "SODAUVL12A8C13D184", "title": "Prognosis", "duration": 363.85914, "year": 2000} -------------------------------------------------------------------------------- /data/song_data/A/B/C/TRABCYE128F934CE1D.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AREVWGE1187B9B890A", "artist_latitude": -13.442, "artist_longitude": -41.9952, "artist_location": "Noci (BA)", "artist_name": "Bitter End", "song_id": "SOFCHDR12AB01866EF", "title": "Living Hell", "duration": 282.43546, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/A/TRAAABD128F429CF47.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARMJAGH1187FB546F3", "artist_latitude": 35.14968, "artist_longitude": -90.04892, "artist_location": "Memphis, TN", "artist_name": "The Box Tops", "song_id": "SOCIWDW12A8C13D406", "title": "Soul Deep", "duration": 148.03546, "year": 1969} -------------------------------------------------------------------------------- /data/song_data/A/A/A/TRAAAEF128F4273421.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR7G5I41187FB4CE6C", "artist_latitude": null, "artist_longitude": null, "artist_location": "London, England", "artist_name": "Adam Ant", "song_id": "SONHOTT12A8C13493C", "title": "Something Girls", "duration": 233.40363, "year": 1982} -------------------------------------------------------------------------------- /data/song_data/A/A/B/TRAABNV128F425CEE1.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARIG6O41187B988BDD", "artist_latitude": 37.16793, "artist_longitude": -95.84502, "artist_location": "United States", "artist_name": "Richard Souther", "song_id": "SOUQQEA12A8C134B1B", "title": "High Tide", "duration": 228.5971, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/C/TRAACQT128F9331780.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR1Y2PT1187FB5B9CE", "artist_latitude": 27.94017, "artist_longitude": -82.32547, "artist_location": "Brandon", "artist_name": "John Wesley", "song_id": "SOLLHMX12AB01846DC", "title": "The Emperor Falls", "duration": 484.62322, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/C/TRAACZK128F4243829.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARGUVEV1187B98BA17", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Sierra Maestra", "song_id": "SOGOSOV12AF72A285E", "title": "\u00bfD\u00f3nde va Chichi?", "duration": 313.12934, "year": 1997} -------------------------------------------------------------------------------- /data/song_data/A/B/A/TRABAXV128F92F6AE3.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AREDBBQ1187B98AFF5", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Eddie Calvert", "song_id": "SOBBXLX12A58A79DDA", "title": "Erica (2005 Digital Remaster)", "duration": 138.63138, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/B/TRABBVJ128F92F7EAA.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AREDL271187FB40F44", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Soul Mekanik", "song_id": "SOPEGZN12AB0181B3D", "title": "Get Your Head Stuck On Your Neck", "duration": 45.66159, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/B/TRABBXU128F92FEF48.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARP6N5A1187B99D1A3", "artist_latitude": null, "artist_longitude": null, "artist_location": "Hamtramck, MI", "artist_name": "Mitch Ryder", "song_id": "SOXILUQ12A58A7C72A", "title": "Jenny Take a Ride", "duration": 207.43791, "year": 2004} -------------------------------------------------------------------------------- /data/song_data/A/B/B/TRABBZN12903CD9297.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARGSAFR1269FB35070", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Blingtones", "song_id": "SOTCKKY12AB018A141", "title": "Sonnerie lalaleul\u00e9 hi houuu", "duration": 29.54404, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/A/TRAAAVO128F93133D4.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARGSJW91187B9B1D6B", "artist_latitude": 35.21962, "artist_longitude": -80.01955, "artist_location": "North Carolina", "artist_name": "JennyAnyKind", "song_id": "SOQHXMF12AB0182363", "title": "Young Boy Blues", "duration": 218.77506, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/B/TRAABCL128F4286650.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARC43071187B990240", "artist_latitude": null, "artist_longitude": null, "artist_location": "Wisner, LA", "artist_name": "Wayne Watson", "song_id": "SOKEJEJ12A8C13E0D0", "title": "The Urgency (LP Version)", "duration": 245.21098, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/B/TRABBTA128F933D304.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARAGB2O1187FB3A161", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Pucho & His Latin Soul Brothers", "song_id": "SOLEYHO12AB0188A85", "title": "Got My Mojo Workin", "duration": 338.23302, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/B/TRAABJV128F1460C49.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARIK43K1187B9AE54C", "artist_latitude": null, "artist_longitude": null, "artist_location": "Beverly Hills, CA", "artist_name": "Lionel Richie", "song_id": "SOBONFF12A6D4F84D8", "title": "Tonight Will Be Alright", "duration": 307.3824, "year": 1986} -------------------------------------------------------------------------------- /data/song_data/A/A/B/TRAABLR128F423B7E3.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARD842G1187B997376", "artist_latitude": 43.64856, "artist_longitude": -79.38533, "artist_location": "Toronto, Ontario, Canada", "artist_name": "Blue Rodeo", "song_id": "SOHUOAP12A8AE488E9", "title": "Floating", "duration": 491.12771, "year": 1987} -------------------------------------------------------------------------------- /data/song_data/A/A/C/TRAACOW128F933E35F.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARH4Z031187B9A71F2", "artist_latitude": 40.73197, "artist_longitude": -74.17418, "artist_location": "Newark, NJ", "artist_name": "Faye Adams", "song_id": "SOVYKGO12AB0187199", "title": "Crazy Mixed Up World", "duration": 156.39465, "year": 1961} -------------------------------------------------------------------------------- /data/song_data/A/A/C/TRAACSL128F93462F4.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARAJPHH1187FB5566A", "artist_latitude": 40.7038, "artist_longitude": -73.83168, "artist_location": "Queens, NY", "artist_name": "The Shangri-Las", "song_id": "SOYTPEP12AB0180E7B", "title": "Twist and Shout", "duration": 164.80608, "year": 1964} -------------------------------------------------------------------------------- /data/song_data/A/B/A/TRABAFJ128F42AF24E.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR3JMC51187B9AE49D", "artist_latitude": 28.53823, "artist_longitude": -81.37739, "artist_location": "Orlando, FL", "artist_name": "Backstreet Boys", "song_id": "SOPVXLX12A8C1402D5", "title": "Larger Than Life", "duration": 236.25098, "year": 1999} -------------------------------------------------------------------------------- /data/song_data/A/B/A/TRABAWW128F4250A31.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARQ9BO41187FB5CF1F", "artist_latitude": 40.99471, "artist_longitude": -77.60454, "artist_location": "Pennsylvania", "artist_name": "John Davis", "song_id": "SOMVWWT12A58A7AE05", "title": "Knocked Out Of The Park", "duration": 183.17016, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/B/TRABBAM128F429D223.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARBGXIG122988F409D", "artist_latitude": 37.77916, "artist_longitude": -122.42005, "artist_location": "California - SF", "artist_name": "Steel Rain", "song_id": "SOOJPRH12A8C141995", "title": "Loaded Like A Gun", "duration": 173.19138, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/B/TRABBJE12903CDB442.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARGCY1Y1187B9A4FA5", "artist_latitude": 36.16778, "artist_longitude": -86.77836, "artist_location": "Nashville, TN.", "artist_name": "Gloriana", "song_id": "SOQOTLQ12AB01868D0", "title": "Clementina Santaf\u00e8", "duration": 153.33832, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/B/TRABBLU128F93349CF.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARNNKDK1187B98BBD5", "artist_latitude": 45.80726, "artist_longitude": 15.9676, "artist_location": "Zagreb Croatia", "artist_name": "Jinx", "song_id": "SOFNOQK12AB01840FC", "title": "Kutt Free (DJ Volume Remix)", "duration": 407.37914, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/A/TRAAAPK128E0786D96.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR10USD1187B99F3F1", "artist_latitude": null, "artist_longitude": null, "artist_location": "Burlington, Ontario, Canada", "artist_name": "Tweeterfriendly Music", "song_id": "SOHKNRJ12A6701D1F8", "title": "Drop of Rain", "duration": 189.57016, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/B/TRAABYN12903CFD305.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARQGYP71187FB44566", "artist_latitude": 34.31109, "artist_longitude": -94.02978, "artist_location": "Mineola, AR", "artist_name": "Jimmy Wakely", "song_id": "SOWTBJW12AC468AC6E", "title": "Broken-Down Merry-Go-Round", "duration": 151.84934, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/C/TRAACPE128F421C1B9.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARB29H41187B98F0EF", "artist_latitude": 41.88415, "artist_longitude": -87.63241, "artist_location": "Chicago", "artist_name": "Terry Callier", "song_id": "SOGNCJP12A58A80271", "title": "Do You Finally Need A Friend", "duration": 342.56934, "year": 1972} -------------------------------------------------------------------------------- /data/song_data/A/B/A/TRABAVQ12903CBF7E0.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARMBR4Y1187B9990EB", "artist_latitude": 37.77916, "artist_longitude": -122.42005, "artist_location": "California - SF", "artist_name": "David Martin", "song_id": "SOTTDKS12AB018D69B", "title": "It Wont Be Christmas", "duration": 241.47546, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/B/TRABBKX128F4285205.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR36F9J1187FB406F1", "artist_latitude": 56.27609, "artist_longitude": 9.51695, "artist_location": "Denmark", "artist_name": "Bombay Rockers", "song_id": "SOBKWDJ12A8C13B2F3", "title": "Wild Rose (Back 2 Basics Mix)", "duration": 230.71302, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/B/TRABBOP128F931B50D.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARBEBBY1187B9B43DB", "artist_latitude": null, "artist_longitude": null, "artist_location": "Gainesville, FL", "artist_name": "Tom Petty", "song_id": "SOFFKZS12AB017F194", "title": "A Higher Place (Album Version)", "duration": 236.17261, "year": 1994} -------------------------------------------------------------------------------- /data/song_data/A/A/A/TRAAAMO128F1481E7F.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARKFYS91187B98E58F", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Jeff And Sheri Easter", "song_id": "SOYMRWW12A6D4FAB14", "title": "The Moon And I (Ordinary Day Album Version)", "duration": 267.7024, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/C/TRAACFV128F935E50B.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR47JEX1187B995D81", "artist_latitude": 37.83721, "artist_longitude": -94.35868, "artist_location": "Nevada, MO", "artist_name": "SUE THOMPSON", "song_id": "SOBLGCN12AB0183212", "title": "James (Hold The Ladder Steady)", "duration": 124.86485, "year": 1985} -------------------------------------------------------------------------------- /data/song_data/A/A/C/TRAACNS128F14A2DF5.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AROUOZZ1187B9ABE51", "artist_latitude": 40.79195, "artist_longitude": -73.94512, "artist_location": "New York, NY [Spanish Harlem]", "artist_name": "Willie Bobo", "song_id": "SOBZBAZ12A6D4F8742", "title": "Spanish Grease", "duration": 168.25424, "year": 1997} -------------------------------------------------------------------------------- /data/song_data/A/A/C/TRAACTB12903CAAF15.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR0RCMP1187FB3F427", "artist_latitude": 30.08615, "artist_longitude": -94.10158, "artist_location": "Beaumont, TX", "artist_name": "Billie Jo Spears", "song_id": "SOGXHEG12AB018653E", "title": "It Makes No Difference Now", "duration": 133.32853, "year": 1992} -------------------------------------------------------------------------------- /data/song_data/A/B/A/TRABAIO128F42938F9.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AR9AWNF1187B9AB0B4", "artist_latitude": null, "artist_longitude": null, "artist_location": "Seattle, Washington USA", "artist_name": "Kenny G featuring Daryl Hall", "song_id": "SOZHPGD12A8C1394FE", "title": "Baby Come To Me", "duration": 236.93016, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/A/TRABAXR128F426515F.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARI2JSK1187FB496EF", "artist_latitude": 51.50632, "artist_longitude": -0.12714, "artist_location": "London, England", "artist_name": "Nick Ingman;Gavyn Wright", "song_id": "SODUJBS12A8C132150", "title": "Wessex Loses a Bride", "duration": 111.62077, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/C/TRABCKL128F423A778.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARPFHN61187FB575F6", "artist_latitude": 41.88415, "artist_longitude": -87.63241, "artist_location": "Chicago, IL", "artist_name": "Lupe Fiasco", "song_id": "SOWQTQZ12A58A7B63E", "title": "Streets On Fire (Explicit Album Version)", "duration": 279.97995, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/A/C/TRAACLV128F427E123.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARDNS031187B9924F0", "artist_latitude": 32.67828, "artist_longitude": -83.22295, "artist_location": "Georgia", "artist_name": "Tim Wilson", "song_id": "SONYPOM12A8C13B2D7", "title": "I Think My Wife Is Running Around On Me (Taco Hell)", "duration": 186.48771, "year": 2005} -------------------------------------------------------------------------------- /data/song_data/A/B/C/TRABCFL128F149BB0D.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARLTWXK1187FB5A3F8", "artist_latitude": 32.74863, "artist_longitude": -97.32925, "artist_location": "Fort Worth, TX", "artist_name": "King Curtis", "song_id": "SODREIN12A58A7F2E5", "title": "A Whiter Shade Of Pale (Live @ Fillmore West)", "duration": 326.00771, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/C/TRABCIX128F4265903.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARNF6401187FB57032", "artist_latitude": 40.79086, "artist_longitude": -73.96644, "artist_location": "New York, NY [Manhattan]", "artist_name": "Sophie B. Hawkins", "song_id": "SONWXQJ12A8C134D94", "title": "The Ballad Of Sleeping Beauty", "duration": 305.162, "year": 1994} -------------------------------------------------------------------------------- /songs_json_paths.json: -------------------------------------------------------------------------------- 1 | { 2 | "jsonpaths": [ 3 | "$['num_songs']", 4 | "$['artist_id']", 5 | "$['artist_latitude']", 6 | "$['artist_longitude']", 7 | "$['artist_location']", 8 | "$['artist_name']", 9 | "$['song_id']", 10 | "$['title']", 11 | "$['duration']", 12 | "$['year']" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /data/song_data/A/A/C/TRAACER128F4290F96.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARMAC4T1187FB3FA4C", "artist_latitude": 40.82624, "artist_longitude": -74.47995, "artist_location": "Morris Plains, NJ", "artist_name": "The Dillinger Escape Plan", "song_id": "SOBBUGU12A8C13E95D", "title": "Setting Fire to Sleeping Giants", "duration": 207.77751, "year": 2004} -------------------------------------------------------------------------------- /data/song_data/A/B/A/TRABAFP128F931E9A1.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARPBNLO1187FB3D52F", "artist_latitude": 40.71455, "artist_longitude": -74.00712, "artist_location": "New York, NY", "artist_name": "Tiny Tim", "song_id": "SOAOIBZ12AB01815BE", "title": "I Hold Your Hand In Mine [Live At Royal Albert Hall]", "duration": 43.36281, "year": 2000} -------------------------------------------------------------------------------- /data/song_data/A/A/C/TRAACVS128E078BE39.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "AREBBGV1187FB523D2", "artist_latitude": null, "artist_longitude": null, "artist_location": "Houston, TX", "artist_name": "Mike Jones (Featuring CJ_ Mello & Lil' Bran)", "song_id": "SOOLYAZ12A6701F4A6", "title": "Laws Patrolling (Album Version)", "duration": 173.66159, "year": 0} -------------------------------------------------------------------------------- /data/song_data/A/B/B/TRABBOR128F4286200.json: -------------------------------------------------------------------------------- 1 | {"num_songs": 1, "artist_id": "ARDR4AC1187FB371A1", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Montserrat Caball\u00e9;Placido Domingo;Vicente Sardinero;Judith Blegen;Sherrill Milnes;Georg Solti", "song_id": "SOBAYLL12A8C138AF9", "title": "Sono andati? Fingevo di dormire", "duration": 511.16363, "year": 0} -------------------------------------------------------------------------------- /dwh_template.cfg: -------------------------------------------------------------------------------- 1 | [AWS] 2 | KEY = 3 | SECRET = 4 | 5 | [DWH] 6 | DWH_CLUSTER_TYPE = multi-node 7 | DWH_NUM_NODES = 4 8 | DWH_NODE_TYPE = dc2.large 9 | DWH_CLUSTER_IDENTIFIER = 10 | DWH_DB = 11 | DWH_DB_USER = 12 | DWH_DB_PASSWORD = 13 | DWH_PORT = 5439 14 | DWH_IAM_ROLE_NAME = 15 | 16 | [CLUSTER] 17 | HOST = 18 | DB_NAME = 19 | DB_USER = 20 | DB_PASSWORD = 21 | DB_PORT = 5439 22 | 23 | [IAM_ROLE] 24 | ARN = 25 | 26 | [S3] 27 | LOG_DATA = 's3:///log-data' 28 | SONG_DATA = 's3:///song-data/' 29 | LOG_JSONPATH = 's3:///log_json_path.json' 30 | SONGS_JSONPATH = 's3:///songs_json_path.json' 31 | 32 | BUCKET = 33 | LOCAL_PATH = 34 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | Copyright (c) 2019 Jukka Kansanaho 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /create_tables.py: -------------------------------------------------------------------------------- 1 | import configparser 2 | import psycopg2 3 | from sql_queries import create_table_queries, drop_table_queries 4 | 5 | 6 | def drop_tables(cur, conn): 7 | """Drop any existing tables from sparkifydb. 8 | 9 | Keyword arguments: 10 | * cur -- cursory to connected DB. Allows to execute SQL commands. 11 | * conn -- (psycopg2) connection to Postgres database (sparkifydb). 12 | 13 | Output: 14 | * Old sparkifydb database tables are dropped from AWS Redshift. 15 | """ 16 | for query in drop_table_queries: 17 | try: 18 | cur.execute(query) 19 | conn.commit() 20 | except psycopg2.Error as e: 21 | print("Error: Issue dropping table: " + query) 22 | print(e) 23 | 24 | print("Tables dropped successfully.") 25 | 26 | def create_tables(cur, conn): 27 | """Create new tables (songplays, users, artists, songs, time) 28 | to sparkifydb. 29 | 30 | Keyword arguments: 31 | * cur -- cursory to connected DB. Allows to execute SQL commands. 32 | * conn -- (psycopg2) connection to Postgres database (sparkifydb). 33 | 34 | Output: 35 | * New sparkifydb database tables are created into AWS Redshift. 36 | """ 37 | for query in create_table_queries: 38 | try: 39 | cur.execute(query) 40 | conn.commit() 41 | except psycopg2.Error as e: 42 | print("Error: Issue creating table: " + query) 43 | print(e) 44 | print("Tables created successfully.") 45 | 46 | def main(): 47 | """Connect to AWS Redshift, create new DB (sparkifydb), 48 | drop any existing tables, create new tables. Close DB connection. 49 | 50 | Keyword arguments (from dwh.cfg): 51 | * host -- AWS Redshift cluster address. 52 | * dbname -- DB name. 53 | * user -- Username for the DB. 54 | * password -- Password for the DB. 55 | * port -- DB port to connect to. 56 | * cur -- cursory to connected DB. Allows to execute SQL commands. 57 | * conn -- (psycopg2) connection to Postgres database (sparkifydb). 58 | 59 | Output: 60 | * New sparkifydb is created, old tables are droppped, 61 | and new tables (songplays, users, artists, songs, time) 62 | are created.. 63 | """ 64 | config = configparser.ConfigParser() 65 | config.read('dwh.cfg') 66 | 67 | conn = psycopg2.connect("host={} dbname={} user={} password={} port={}".format(*config['CLUSTER'].values())) 68 | cur = conn.cursor() 69 | 70 | drop_tables(cur, conn) 71 | create_tables(cur, conn) 72 | 73 | conn.close() 74 | 75 | 76 | if __name__ == "__main__": 77 | main() 78 | -------------------------------------------------------------------------------- /etl.py: -------------------------------------------------------------------------------- 1 | import configparser 2 | import psycopg2 3 | from sql_queries import copy_table_queries, insert_table_queries 4 | 5 | 6 | def load_staging_tables(cur, conn): 7 | """Load JSON input data (log_data and song_data) from S3 and insert 8 | into staging_events and staging_songs tables. 9 | 10 | Keyword arguments: 11 | * cur -- reference to connected db. 12 | * conn -- parameters (host, dbname, user, password, port) 13 | to connect the DB. 14 | 15 | Output: 16 | * log_data in staging_events table. 17 | * song_data in staging_songs table. 18 | """ 19 | print("Start loading data from S3 to AWS Reshift tables...") 20 | 21 | for query in copy_table_queries: 22 | print('------------------') 23 | print('Processing query: {}'.format(query)) 24 | cur.execute(query) 25 | conn.commit() 26 | print('------------------') 27 | print('{} processed OK.'.format(query)) 28 | 29 | print('All files COPIED OK.') 30 | 31 | 32 | 33 | def insert_tables(cur, conn): 34 | """Insert data from staging tables (staging_events and staging_songs) 35 | into star schema analytics tables: 36 | * Fact table: songplays 37 | * Dimension tables: users, songs, artists, time 38 | 39 | Keyword arguments: 40 | * cur -- reference to connected db. 41 | * conn -- parameters (host, dbname, user, password, port) 42 | to connect the DB. 43 | 44 | Output: 45 | * Data inserted from staging tables to dimension tables. 46 | * Data inserted from staging tables to fact table. 47 | """ 48 | print("Start inserting data from staging tables into analysis tables...") 49 | for query in insert_table_queries: 50 | print('------------------') 51 | print('Processing query: {}'.format(query)) 52 | cur.execute(query) 53 | conn.commit() 54 | print('{} processed OK.'.format(query)) 55 | 56 | print('All files INSERTED OK.') 57 | 58 | def main(): 59 | """Connect to DB and call 60 | * load_staging_tables to load data from JSON files 61 | (song_data and log_data in S3) to staging tables and 62 | * insert_tables to insert data to analysis tables. 63 | 64 | Keyword arguments: 65 | * None 66 | 67 | Output: 68 | * All input data processed in DB tables. 69 | """ 70 | config = configparser.ConfigParser() 71 | config.read('dwh.cfg') 72 | 73 | conn = psycopg2.connect("host={} dbname={} user={} password={} port={}" 74 | .format(*config['CLUSTER'] 75 | .values())) 76 | cur = conn.cursor() 77 | print("AWS Redshift connection established OK.") 78 | 79 | load_staging_tables(cur, conn) 80 | insert_tables(cur, conn) 81 | 82 | conn.close() 83 | 84 | 85 | if __name__ == "__main__": 86 | main() 87 | -------------------------------------------------------------------------------- /data/log_data/2018-11-01-events.json: -------------------------------------------------------------------------------- 1 | {"artist":null,"auth":"Logged In","firstName":"Walter","gender":"M","itemInSession":0,"lastName":"Frye","length":null,"level":"free","location":"San Francisco-Oakland-Hayward, CA","method":"GET","page":"Home","registration":1540919166796.0,"sessionId":38,"song":null,"status":200,"ts":1541105830796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"39"} 2 | {"artist":null,"auth":"Logged In","firstName":"Kaylee","gender":"F","itemInSession":0,"lastName":"Summers","length":null,"level":"free","location":"Phoenix-Mesa-Scottsdale, AZ","method":"GET","page":"Home","registration":1540344794796.0,"sessionId":139,"song":null,"status":200,"ts":1541106106796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.153 Safari\/537.36\"","userId":"8"} 3 | {"artist":"Des'ree","auth":"Logged In","firstName":"Kaylee","gender":"F","itemInSession":1,"lastName":"Summers","length":246.30812,"level":"free","location":"Phoenix-Mesa-Scottsdale, AZ","method":"PUT","page":"NextSong","registration":1540344794796.0,"sessionId":139,"song":"You Gotta Be","status":200,"ts":1541106106796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.153 Safari\/537.36\"","userId":"8"} 4 | {"artist":null,"auth":"Logged In","firstName":"Kaylee","gender":"F","itemInSession":2,"lastName":"Summers","length":null,"level":"free","location":"Phoenix-Mesa-Scottsdale, AZ","method":"GET","page":"Upgrade","registration":1540344794796.0,"sessionId":139,"song":null,"status":200,"ts":1541106132796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.153 Safari\/537.36\"","userId":"8"} 5 | {"artist":"Mr Oizo","auth":"Logged In","firstName":"Kaylee","gender":"F","itemInSession":3,"lastName":"Summers","length":144.03873,"level":"free","location":"Phoenix-Mesa-Scottsdale, AZ","method":"PUT","page":"NextSong","registration":1540344794796.0,"sessionId":139,"song":"Flat 55","status":200,"ts":1541106352796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.153 Safari\/537.36\"","userId":"8"} 6 | {"artist":"Tamba Trio","auth":"Logged In","firstName":"Kaylee","gender":"F","itemInSession":4,"lastName":"Summers","length":177.18812,"level":"free","location":"Phoenix-Mesa-Scottsdale, AZ","method":"PUT","page":"NextSong","registration":1540344794796.0,"sessionId":139,"song":"Quem Quiser Encontrar O Amor","status":200,"ts":1541106496796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.153 Safari\/537.36\"","userId":"8"} 7 | {"artist":"The Mars Volta","auth":"Logged In","firstName":"Kaylee","gender":"F","itemInSession":5,"lastName":"Summers","length":380.42077,"level":"free","location":"Phoenix-Mesa-Scottsdale, AZ","method":"PUT","page":"NextSong","registration":1540344794796.0,"sessionId":139,"song":"Eriatarka","status":200,"ts":1541106673796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.153 Safari\/537.36\"","userId":"8"} 8 | {"artist":"Infected Mushroom","auth":"Logged In","firstName":"Kaylee","gender":"F","itemInSession":6,"lastName":"Summers","length":440.2673,"level":"free","location":"Phoenix-Mesa-Scottsdale, AZ","method":"PUT","page":"NextSong","registration":1540344794796.0,"sessionId":139,"song":"Becoming Insane","status":200,"ts":1541107053796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.153 Safari\/537.36\"","userId":"8"} 9 | {"artist":"Blue October \/ Imogen Heap","auth":"Logged In","firstName":"Kaylee","gender":"F","itemInSession":7,"lastName":"Summers","length":241.3971,"level":"free","location":"Phoenix-Mesa-Scottsdale, AZ","method":"PUT","page":"NextSong","registration":1540344794796.0,"sessionId":139,"song":"Congratulations","status":200,"ts":1541107493796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.153 Safari\/537.36\"","userId":"8"} 10 | {"artist":"Girl Talk","auth":"Logged In","firstName":"Kaylee","gender":"F","itemInSession":8,"lastName":"Summers","length":160.15628,"level":"free","location":"Phoenix-Mesa-Scottsdale, AZ","method":"PUT","page":"NextSong","registration":1540344794796.0,"sessionId":139,"song":"Once again","status":200,"ts":1541107734796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.153 Safari\/537.36\"","userId":"8"} 11 | {"artist":"Black Eyed Peas","auth":"Logged In","firstName":"Sylvie","gender":"F","itemInSession":0,"lastName":"Cruz","length":214.93506,"level":"free","location":"Washington-Arlington-Alexandria, DC-VA-MD-WV","method":"PUT","page":"NextSong","registration":1540266185796.0,"sessionId":9,"song":"Pump It","status":200,"ts":1541108520796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"10"} 12 | {"artist":null,"auth":"Logged In","firstName":"Ryan","gender":"M","itemInSession":0,"lastName":"Smith","length":null,"level":"free","location":"San Jose-Sunnyvale-Santa Clara, CA","method":"GET","page":"Home","registration":1541016707796.0,"sessionId":169,"song":null,"status":200,"ts":1541109015796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/36.0.1985.125 Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"26"} 13 | {"artist":"Fall Out Boy","auth":"Logged In","firstName":"Ryan","gender":"M","itemInSession":1,"lastName":"Smith","length":200.72444,"level":"free","location":"San Jose-Sunnyvale-Santa Clara, CA","method":"PUT","page":"NextSong","registration":1541016707796.0,"sessionId":169,"song":"Nobody Puts Baby In The Corner","status":200,"ts":1541109125796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/36.0.1985.125 Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"26"} 14 | {"artist":"M.I.A.","auth":"Logged In","firstName":"Ryan","gender":"M","itemInSession":2,"lastName":"Smith","length":233.7171,"level":"free","location":"San Jose-Sunnyvale-Santa Clara, CA","method":"PUT","page":"NextSong","registration":1541016707796.0,"sessionId":169,"song":"Mango Pickle Down River (With The Wilcannia Mob)","status":200,"ts":1541109325796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/36.0.1985.125 Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"26"} 15 | {"artist":"Survivor","auth":"Logged In","firstName":"Jayden","gender":"M","itemInSession":0,"lastName":"Fox","length":245.36771,"level":"free","location":"New Orleans-Metairie, LA","method":"PUT","page":"NextSong","registration":1541033612796.0,"sessionId":100,"song":"Eye Of The Tiger","status":200,"ts":1541110994796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.3; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"101"} -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | _(Udacity: Data Engineering Nano Degree) | jukka.kansanaho@gmail.com | 2019-05-04_ 2 | _This project is a part of [Udacity's Data Engineer Nano Degree](https://eu.udacity.com/course/data-engineer-nanodegree--nd027)._ 3 | 4 | # PROJECT-3: Data Warehouse 5 | 6 | ## Quick start 7 | 8 | First, rename dwh_template.cfg to dwh.cfg and fill in the open fields. Fill in AWS acces key (KEY) and secret (SECRET). 9 | 10 | To access AWS, you need to do in AWS the following: 11 | 12 | * create IAM user (e.g. dwhuser) 13 | * create IAM role (e.g. dwhRole) with AmazonS3ReadOnlyAccess access rights 14 | * get ARN 15 | * create and run Redshift cluster (e.g. dwhCluster => HOST) 16 | 17 | For creating IAM role, getting ARN and running cluster, you can use `Udacity-DEND-Project-3-AWS-Setup.ipynb`. 18 | 19 | Example data is in data folder. To run the script to use that data, do the wfollowing: 20 | 21 | * Create an AWS S3 bucket. 22 | * Edit cwh.cfg: add your S3 bucket name in LOG_PATH and SONG_PATH variables. 23 | * Copy log_data and song_data folders to your own S3 bucket. 24 | 25 | After installing python3 + AWS SDK (boto3) libraries and dependencies, run from command line: 26 | 27 | * `python3 create_tables.py` (to create the DB to AWS Redshift) 28 | * `python3 etl.py` (to process all the input data to the DB) 29 | 30 | --- 31 | 32 | ## Overview 33 | 34 | This Project-3 handles data of a music streaming startup, Sparkify. Data set is a set of files in JSON format stored in AWS S3 buckets and contains two parts: 35 | 36 | * **s3://udacity-dend/song_data**: static data about artists and songs 37 | Song-data example: 38 | `{"num_songs": 1, "artist_id": "ARJIE2Y1187B994AB7", "artist_latitude": null, "artist_longitude": null, "artist_location": "", "artist_name": "Line Renaud", "song_id": "SOUPIRU12A6D4FA1E1", "title": "Der Kleine Dompfaff", "duration": 152.92036, "year": 0}` 39 | 40 | * **s3://udacity-dend/log_data**: event data of service usage e.g. who listened what song, when, where, and with which client 41 | ![Log-data example (log-data/2018/11/2018-11-12-events.json)](./Udacity-DEND-C3-Project3-LogDataExample-20190504.png) 42 | * **s3://udacity-dend/log_json_path.json**: ... 43 | 44 | Below, some figures about the data set (results after running the etl.py): 45 | 46 | * s3://udacity-dend/song_data: 14897 files, 385252 DB rows 47 | * s3://udacity-dend/log_data: 31 files, 8056 DB rows 48 | * songplays: 245719 rows 49 | * (unique) users: 104 rows 50 | * songs: 384824 rows 51 | * artists: 45266 rows 52 | * time: 6813 rows 53 | 54 | Project builds an ETL pipeline (Extract, Transform, Load) to create the DB and tables in AWS Redshift cluster, fetch data from JSON files stored in AWS S3, process the data, and insert the data to AWS Redshift DB. As technologies, Project-3 uses python, SQL, AWS S3 and AWS Redshift DB. 55 | 56 | --- 57 | 58 | ## About Database 59 | 60 | Sparkify analytics database (called here sparkifydb) schema has a star design. Start design means that it has one Fact Table having business data, and supporting Dimension Tables. The Fact Table answers one of the key questions: what songs users are listening to. DB schema is the following: 61 | 62 | ![SparkifyDB schema as ER Diagram](./Udacity-DEND-C3-Project3-ERD-20190517v1.png) 63 | 64 | _*SparkifyDB schema as ER Diagram.*_ 65 | 66 | ### AWS Redshift set-up 67 | 68 | AWS Redshift is used in ETL pipeline as the DB solution. Used set-up in the Project-3 is as follows: 69 | 70 | * Cluster: 4x dc2.large nodes 71 | * Location: US-West-2 (as Project-3's AWS S3 bucket) 72 | 73 | ### Staging tables 74 | 75 | * **staging_events**: event data telling what users have done (columns: event_id, artist, auth, firstName, gender, itemInSession, lastName, length, level, location, method, page, registration, sessionId, song, status, ts, userAgent, userId) 76 | * **staging_songs**: song data about songs and artists (columns: num_songs, artist_id, artist_latitude, artist_longitude, artist_location, artist_name, song_id, title, duration, year) 77 | 78 | Findings: 79 | 80 | * song_data contained some anomalies forcing to set artist_location, artist_name, and title columns to extra large (VARCHAR(500)). 81 | * COPYing event_data to staging_events table is very fast (only a few seconds) 82 | * COPYing song_data to staging_songs is very slow process due to large amount of the source data (final test run took Redshift about 32min for analysis phase + 35 for actual copy operation). 83 | 84 | ### Fact Table 85 | 86 | * **songplays**: song play data together with user, artist, and song info (songplay_id, start_time, user_id, level, song_id, artist_id, session_id, location, user_agent) 87 | 88 | ### Dimension Tables 89 | 90 | * **users**: user info (columns: user_id, first_name, last_name, gender, level) 91 | * **songs**: song info (columns: song_id, title, artist_id, year, duration) 92 | * **artists**: artist info (columns: artist_id, name, location, latitude, longitude) 93 | * **time**: detailed time info about song plays (columns: start_time, hour, day, week, month, year, weekday) 94 | 95 | Findings: 96 | 97 | * Due to source data anomalies, songs table contains one extra large column (title VARCHAR(500)). Similarly, artists table contains two extra large columns (name VARCHAR(500), location VARCHAR(500)). 98 | * INSERT queries from staging tables to analytics tables are very fast and take only a few seconds each. 99 | 100 | --- 101 | 102 | ## HOWTO use 103 | 104 | **Project has two scripts:** 105 | 106 | * **create_tables.py**: This script drops existing tables and creates new ones. 107 | * **etl.py**: This script uses data in s3:/udacity-dend/song_data and s3:/udacity-dend/log_data, processes it, and inserts the processed data into DB. 108 | 109 | ### Prerequisites 110 | 111 | Python3 is recommended as the environment. The most convenient way to install python is to use Anaconda (https://www.anaconda.com/distribution/) either via GUI or command line. 112 | Also, the following libraries are needed for the python environment to make Jupyter Notebook and AWS Redshift to work: 113 | 114 | * _AWS SDK (boto3)_ (+ dependencies) to enable scripts and Jupyter to connect to AWS Redshift DB. (See https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) 115 | * _jupyter_ (+ dependencies) to enable Jupyter Notebook. 116 | * _ipython-sql_ (https://anaconda.org/conda-forge/ipython-sql) to make Jupyter Notebook and SQL queries to AWS Redshift work together. NOTE: you may need to install this library from command line. 117 | 118 | ### Run create_tables.py 119 | 120 | Type to command line: 121 | 122 | `python3 create_tables.py` 123 | 124 | * All tables are dropped. 125 | * New tables are created: 2x staging tables + 4x dimensional tables + 1x fact table. 126 | * Output: Script writes _"Tables dropped successfully"_ and _"Tables created successfully"_ if all tables were dropped and created without errors. 127 | 128 | ### Run etl.py 129 | 130 | Type to command line: 131 | 132 | `python3 etl.py` 133 | 134 | * Script executes AWS Redshift COPY commands to insert source data (JSON files) to DB staging tables. 135 | * From staging tables, data is further inserted to analytics tables. 136 | * Script writes to console the query it's executing at any given time and if the query was successfully executed. 137 | * In the end, script tells if whole ETL-pipeline was successfully executed. 138 | 139 | Output: raw data is in staging_tables + selected data in analytics tables. 140 | 141 | ## Data cleaning process 142 | 143 | `etl.py`works the following way to process the data from source files to analytics tables: 144 | 145 | * Loading part of the script (COPY from JSON to staging tables) query takes the data as it is. 146 | * When inserting data from staging tables to analytics tables, queries remove any duplicates (INSERT ... SELECT DISTINCT ...). 147 | 148 | ## Example queries 149 | 150 | * Get users and songs they listened at particular time. Limit query to 1000 hits: 151 | 152 | ``` 153 | SELECT sp.songplay_id, 154 | u.user_id, 155 | s.song_id, 156 | u.last_name, 157 | sp.start_time, 158 | a.name, 159 | s.title 160 | FROM songplays AS sp 161 | JOIN users AS u ON (u.user_id = sp.user_id) 162 | JOIN songs AS s ON (s.song_id = sp.song_id) 163 | JOIN artists AS a ON (a.artist_id = sp.artist_id) 164 | JOIN time AS t ON (t.start_time = sp.start_time) 165 | ORDER BY (sp.start_time) 166 | LIMIT 1000; 167 | ``` 168 | 169 | * Get count of rows in staging_songs table: 170 | 171 | ``` 172 | SELECT COUNT(*) 173 | FROM staging_songs; 174 | ``` 175 | 176 | * Get count of rows in songplays table: 177 | 178 | ``` 179 | SELECT COUNT(*) 180 | FROM songplays; 181 | ``` 182 | 183 | ## Other 184 | 185 | Project-3 also contains the following files: 186 | 187 | * **Udacity-DEND-Project-3-AWS-Setup.ipynb**: Jupyter Notebook for starting and stopping AWS Redshift cluster and to run test queries. 188 | 189 | ## Summary 190 | 191 | Project-3 provides customer startup Sparkify tools to analyse their service data and help them answer their key business questions like "Who listened which song and when?" 192 | -------------------------------------------------------------------------------- /sql_queries.py: -------------------------------------------------------------------------------- 1 | import configparser 2 | 3 | 4 | # CONFIG 5 | config = configparser.ConfigParser() 6 | config.read('dwh.cfg') 7 | 8 | ARN = config.get('IAM_ROLE', 'ARN') 9 | LOG_DATA = config.get('S3', 'LOG_DATA') 10 | LOG_JSONPATH = config.get('S3', 'LOG_JSONPATH') 11 | SONG_DATA = config.get('S3', 'SONG_DATA') 12 | SONGS_JSONPATH = config.get('S3', 'SONGS_JSONPATH') 13 | 14 | # DROP TABLES 15 | 16 | staging_events_table_drop = "DROP TABLE IF EXISTS staging_events" 17 | staging_songs_table_drop = "DROP TABLE IF EXISTS staging_songs" 18 | songplay_table_drop = "DROP TABLE IF EXISTS songplays" 19 | user_table_drop = "DROP TABLE IF EXISTS users" 20 | song_table_drop = "DROP TABLE IF EXISTS songs" 21 | artist_table_drop = "DROP TABLE IF EXISTS artists" 22 | time_table_drop = "DROP TABLE IF EXISTS time" 23 | 24 | # CREATE TABLES 25 | 26 | # Staging tables 27 | staging_events_table_create= (""" 28 | CREATE TABLE IF NOT EXISTS staging_events ( 29 | event_id BIGINT IDENTITY(0,1) NOT NULL, 30 | artist VARCHAR NULL, 31 | auth VARCHAR NULL, 32 | firstName VARCHAR NULL, 33 | gender VARCHAR NULL, 34 | itemInSession VARCHAR NULL, 35 | lastName VARCHAR NULL, 36 | length VARCHAR NULL, 37 | level VARCHAR NULL, 38 | location VARCHAR NULL, 39 | method VARCHAR NULL, 40 | page VARCHAR NULL, 41 | registration VARCHAR NULL, 42 | sessionId INTEGER NOT NULL SORTKEY DISTKEY, 43 | song VARCHAR NULL, 44 | status INTEGER NULL, 45 | ts BIGINT NOT NULL, 46 | userAgent VARCHAR NULL, 47 | userId INTEGER NULL 48 | ); 49 | """) 50 | 51 | staging_songs_table_create = (""" 52 | CREATE TABLE IF NOT EXISTS staging_songs ( 53 | num_songs INTEGER NULL, 54 | artist_id VARCHAR NOT NULL SORTKEY DISTKEY, 55 | artist_latitude VARCHAR NULL, 56 | artist_longitude VARCHAR NULL, 57 | artist_location VARCHAR(500) NULL, 58 | artist_name VARCHAR(500) NULL, 59 | song_id VARCHAR NOT NULL, 60 | title VARCHAR(500) NULL, 61 | duration DECIMAL(9) NULL, 62 | year INTEGER NULL 63 | ); 64 | """) 65 | 66 | # Analytics tables 67 | songplay_table_create = (""" 68 | CREATE TABLE IF NOT EXISTS songplays ( 69 | songplay_id INTEGER IDENTITY(0,1) NOT NULL SORTKEY, 70 | start_time TIMESTAMP NOT NULL, 71 | user_id VARCHAR(50) NOT NULL DISTKEY, 72 | level VARCHAR(10) NOT NULL, 73 | song_id VARCHAR(40) NOT NULL, 74 | artist_id VARCHAR(50) NOT NULL, 75 | session_id VARCHAR(50) NOT NULL, 76 | location VARCHAR(100) NULL, 77 | user_agent VARCHAR(255) NULL 78 | ); 79 | """) 80 | 81 | user_table_create = (""" 82 | CREATE TABLE IF NOT EXISTS users ( 83 | user_id INTEGER NOT NULL SORTKEY, 84 | first_name VARCHAR(50) NULL, 85 | last_name VARCHAR(80) NULL, 86 | gender VARCHAR(10) NULL, 87 | level VARCHAR(10) NULL 88 | ) diststyle all; 89 | """) 90 | 91 | song_table_create = (""" 92 | CREATE TABLE IF NOT EXISTS songs ( 93 | song_id VARCHAR(50) NOT NULL SORTKEY, 94 | title VARCHAR(500) NOT NULL, 95 | artist_id VARCHAR(50) NOT NULL, 96 | year INTEGER NOT NULL, 97 | duration DECIMAL(9) NOT NULL 98 | ); 99 | """) 100 | 101 | artist_table_create = (""" 102 | CREATE TABLE IF NOT EXISTS artists ( 103 | artist_id VARCHAR(50) NOT NULL SORTKEY, 104 | name VARCHAR(500) NULL, 105 | location VARCHAR(500) NULL, 106 | latitude DECIMAL(9) NULL, 107 | longitude DECIMAL(9) NULL 108 | ) diststyle all; 109 | """) 110 | 111 | time_table_create = (""" 112 | CREATE TABLE IF NOT EXISTS time ( 113 | start_time TIMESTAMP NOT NULL SORTKEY, 114 | hour SMALLINT NULL, 115 | day SMALLINT NULL, 116 | week SMALLINT NULL, 117 | month SMALLINT NULL, 118 | year SMALLINT NULL, 119 | weekday SMALLINT NULL 120 | ) diststyle all; 121 | """) 122 | 123 | # STAGING TABLES 124 | 125 | staging_events_copy = (""" 126 | COPY staging_events FROM {} 127 | credentials 'aws_iam_role={}' 128 | format as json {} 129 | STATUPDATE ON 130 | region 'us-west-2'; 131 | """).format(LOG_DATA, ARN, LOG_JSONPATH) 132 | 133 | staging_songs_copy = (""" 134 | COPY staging_songs FROM {} 135 | credentials 'aws_iam_role={}' 136 | format as json 'auto' 137 | ACCEPTINVCHARS AS '^' 138 | STATUPDATE ON 139 | region 'us-west-2'; 140 | """).format(SONG_DATA, ARN) 141 | 142 | # FINAL TABLES 143 | 144 | songplay_table_insert = (""" 145 | INSERT INTO songplays ( start_time, 146 | user_id, 147 | level, 148 | song_id, 149 | artist_id, 150 | session_id, 151 | location, 152 | user_agent) 153 | SELECT DISTINCT TIMESTAMP 'epoch' + se.ts/1000 \ 154 | * INTERVAL '1 second' AS start_time, 155 | se.userId AS user_id, 156 | se.level AS level, 157 | ss.song_id AS song_id, 158 | ss.artist_id AS artist_id, 159 | se.sessionId AS session_id, 160 | se.location AS location, 161 | se.userAgent AS user_agent 162 | FROM staging_events AS se 163 | JOIN staging_songs AS ss 164 | ON (se.artist = ss.artist_name) 165 | WHERE se.page = 'NextSong'; 166 | """) 167 | 168 | user_table_insert = (""" 169 | INSERT INTO users ( user_id, 170 | first_name, 171 | last_name, 172 | gender, 173 | level) 174 | SELECT DISTINCT se.userId AS user_id, 175 | se.firstName AS first_name, 176 | se.lastName AS last_name, 177 | se.gender AS gender, 178 | se.level AS level 179 | FROM staging_events AS se 180 | WHERE se.page = 'NextSong'; 181 | """) 182 | 183 | song_table_insert = (""" 184 | INSERT INTO songs ( song_id, 185 | title, 186 | artist_id, 187 | year, 188 | duration) 189 | SELECT DISTINCT ss.song_id AS song_id, 190 | ss.title AS title, 191 | ss.artist_id AS artist_id, 192 | ss.year AS year, 193 | ss.duration AS duration 194 | FROM staging_songs AS ss; 195 | """) 196 | 197 | artist_table_insert = (""" 198 | INSERT INTO artists ( artist_id, 199 | name, 200 | location, 201 | latitude, 202 | longitude) 203 | SELECT DISTINCT ss.artist_id AS artist_id, 204 | ss.artist_name AS name, 205 | ss.artist_location AS location, 206 | ss.artist_latitude AS latitude, 207 | ss.artist_longitude AS longitude 208 | FROM staging_songs AS ss; 209 | """) 210 | 211 | time_table_insert = (""" 212 | INSERT INTO time ( start_time, 213 | hour, 214 | day, 215 | week, 216 | month, 217 | year, 218 | weekday) 219 | SELECT DISTINCT TIMESTAMP 'epoch' + se.ts/1000 \ 220 | * INTERVAL '1 second' AS start_time, 221 | EXTRACT(hour FROM start_time) AS hour, 222 | EXTRACT(day FROM start_time) AS day, 223 | EXTRACT(week FROM start_time) AS week, 224 | EXTRACT(month FROM start_time) AS month, 225 | EXTRACT(year FROM start_time) AS year, 226 | EXTRACT(week FROM start_time) AS weekday 227 | FROM staging_events AS se 228 | WHERE se.page = 'NextSong'; 229 | """) 230 | 231 | # QUERY LISTS 232 | 233 | create_table_queries = [staging_events_table_create, staging_songs_table_create, songplay_table_create, user_table_create, song_table_create, artist_table_create, time_table_create] 234 | drop_table_queries = [staging_events_table_drop, staging_songs_table_drop, songplay_table_drop, user_table_drop, song_table_drop, artist_table_drop, time_table_drop] 235 | copy_table_queries = [staging_events_copy, staging_songs_copy] 236 | insert_table_queries = [songplay_table_insert, user_table_insert, song_table_insert, artist_table_insert, time_table_insert] 237 | -------------------------------------------------------------------------------- /Udacity-DEND-Project-3-AWS-Setup.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Udacity DEND Project-3: AWS Set-up\n", 8 | "### IaC set-up for Project-3 AWS Redshift" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": 1, 14 | "metadata": {}, 15 | "outputs": [], 16 | "source": [ 17 | "import pandas as pd\n", 18 | "import boto3\n", 19 | "import json" 20 | ] 21 | }, 22 | { 23 | "cell_type": "markdown", 24 | "metadata": { 25 | "toc-hr-collapsed": true 26 | }, 27 | "source": [ 28 | "# STEP 0: Make sure you have an AWS secret and access key\n", 29 | "\n", 30 | "- Create a new IAM user in your AWS account\n", 31 | "- Give it `AdministratorAccess`, From `Attach existing policies directly` Tab\n", 32 | "- Take note of the access key and secret \n", 33 | "- Edit the file `dwh.cfg` in the same folder as this notebook and fill\n", 34 | "\n", 35 | "
\n", 36 | "[AWS]
\n", 37 | "KEY= YOUR_AWS_KEY
\n", 38 | "SECRET= YOUR_AWS_SECRET
\n", 39 | "\n" 40 | ] 41 | }, 42 | { 43 | "cell_type": "markdown", 44 | "metadata": {}, 45 | "source": [ 46 | "# Load DWH Params from a file" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "execution_count": 7, 52 | "metadata": {}, 53 | "outputs": [], 54 | "source": [ 55 | "import configparser\n", 56 | "config = configparser.ConfigParser()\n", 57 | "config.read_file(open('dwh.cfg'))\n", 58 | "\n", 59 | "KEY = config.get('AWS','KEY')\n", 60 | "SECRET = config.get('AWS','SECRET')\n", 61 | "\n", 62 | "DWH_CLUSTER_TYPE = config.get(\"DWH\",\"DWH_CLUSTER_TYPE\")\n", 63 | "DWH_NUM_NODES = config.get(\"DWH\",\"DWH_NUM_NODES\")\n", 64 | "DWH_NODE_TYPE = config.get(\"DWH\",\"DWH_NODE_TYPE\")\n", 65 | "\n", 66 | "DWH_CLUSTER_IDENTIFIER = config.get(\"DWH\",\"DWH_CLUSTER_IDENTIFIER\")\n", 67 | "DWH_DB = config.get(\"DWH\",\"DWH_DB\")\n", 68 | "DWH_DB_USER = config.get(\"DWH\",\"DWH_DB_USER\")\n", 69 | "DWH_DB_PASSWORD = config.get(\"DWH\",\"DWH_DB_PASSWORD\")\n", 70 | "DWH_PORT = config.get(\"DWH\",\"DWH_PORT\")\n", 71 | "\n", 72 | "DWH_IAM_ROLE_NAME = config.get(\"DWH\", \"DWH_IAM_ROLE_NAME\")\n", 73 | "\n", 74 | "(DWH_DB_USER, DWH_DB_PASSWORD, DWH_DB)\n", 75 | "\n", 76 | "# NOTE: Un-comment this to print the result.\n", 77 | "#pd.DataFrame({\"Param\":\n", 78 | "# [\"DWH_CLUSTER_TYPE\", \"DWH_NUM_NODES\", \"DWH_NODE_TYPE\", \"DWH_CLUSTER_IDENTIFIER\", \"DWH_DB\", \"DWH_DB_USER\", \"DWH_DB_PASSWORD\", \"DWH_PORT\", \"DWH_IAM_ROLE_NAME\"],\n", 79 | "# \"Value\":\n", 80 | "# [DWH_CLUSTER_TYPE, DWH_NUM_NODES, DWH_NODE_TYPE, DWH_CLUSTER_IDENTIFIER, DWH_DB, DWH_DB_USER, DWH_DB_PASSWORD, DWH_PORT, DWH_IAM_ROLE_NAME]\n", 81 | "# })" 82 | ] 83 | }, 84 | { 85 | "cell_type": "markdown", 86 | "metadata": {}, 87 | "source": [ 88 | "## Create clients for EC2, S3, IAM, and Redshift" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": 8, 94 | "metadata": {}, 95 | "outputs": [], 96 | "source": [ 97 | "import boto3\n", 98 | "\n", 99 | "ec2 = boto3.resource( 'ec2', \n", 100 | " region_name=\"us-west-2\",\n", 101 | " aws_access_key_id=KEY,\n", 102 | " aws_secret_access_key=SECRET)\n", 103 | "\n", 104 | "s3 = boto3.resource( 's3',\n", 105 | " region_name=\"us-west-2\",\n", 106 | " aws_access_key_id=KEY,\n", 107 | " aws_secret_access_key=SECRET)\n", 108 | "\n", 109 | "iam = boto3.client('iam',\n", 110 | " region_name=\"us-west-2\",\n", 111 | " aws_access_key_id=KEY,\n", 112 | " aws_secret_access_key=SECRET)\n", 113 | "\n", 114 | "redshift = boto3.client('redshift',\n", 115 | " region_name=\"us-west-2\",\n", 116 | " aws_access_key_id=KEY,\n", 117 | " aws_secret_access_key=SECRET)" 118 | ] 119 | }, 120 | { 121 | "cell_type": "markdown", 122 | "metadata": {}, 123 | "source": [ 124 | "## Check out the sample data sources on S3" 125 | ] 126 | }, 127 | { 128 | "cell_type": "code", 129 | "execution_count": 9, 130 | "metadata": {}, 131 | "outputs": [], 132 | "source": [ 133 | "LOG_DATA = config.get(\"S3\", \"BUCKET\")\n", 134 | "logDataBucket = s3.Bucket(LOG_DATA)\n", 135 | "count = 0\n", 136 | "\n", 137 | "# Iterate over log_data bucket objects and print\n", 138 | "for object in logDataBucket.objects.filter(Prefix='log_data'):\n", 139 | " count += 1\n", 140 | " print(object)\n", 141 | "print(\"COUNT: \" + str(count))\n", 142 | "# => COUNT: 31" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": null, 148 | "metadata": {}, 149 | "outputs": [], 150 | "source": [ 151 | "size = sum(1 for _ in logDataBucket.Bucket.objects.filter(Prefix='log_data'))\n", 152 | "print(size)" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": 10, 158 | "metadata": {}, 159 | "outputs": [], 160 | "source": [ 161 | "SONG_DATA = config.get(\"S3\", \"BUCKET\")\n", 162 | "songDataBucket = s3.Bucket(SONG_DATA)\n", 163 | "count = 0\n", 164 | "\n", 165 | "# Iterate over song_data bucket objects and print\n", 166 | "for object in logDataBucket.objects.filter(Prefix='song_data'):\n", 167 | " count += 1\n", 168 | " print(object)\n", 169 | "print(\"COUNT: \" + str(count))" 170 | ] 171 | }, 172 | { 173 | "cell_type": "code", 174 | "execution_count": 11, 175 | "metadata": {}, 176 | "outputs": [], 177 | "source": [ 178 | "SONG_DATA = config.get(\"S3\", \"BUCKET\")\n", 179 | "songDataBucket = s3.Bucket(SONG_DATA)\n", 180 | "count = 0\n", 181 | "\n", 182 | "# Iterate over song_data bucket objects and print\n", 183 | "for object in logDataBucket.objects.filter(Prefix='log_json'):\n", 184 | " count += 1\n", 185 | " print(object)\n", 186 | "print(\"COUNT: \" + str(count))" 187 | ] 188 | }, 189 | { 190 | "cell_type": "code", 191 | "execution_count": 12, 192 | "metadata": {}, 193 | "outputs": [], 194 | "source": [ 195 | "LOG_DATA = config.get(\"S3\", \"BUCKET\")\n", 196 | "LOCAL_PATH = config.get(\"S3\", \"LOCAL_PATH\")\n", 197 | "SONGS_JSONPATH = config.get(\"S3\", \"SONGS_JSONPATH\")\n", 198 | "print(LOG_DATA)\n", 199 | "print(SONGS_JSONPATH)" 200 | ] 201 | }, 202 | { 203 | "cell_type": "markdown", 204 | "metadata": { 205 | "toc-hr-collapsed": true 206 | }, 207 | "source": [ 208 | "## STEP 1: IAM ROLE\n", 209 | "- Create an IAM Role that makes Redshift able to access S3 bucket (ReadOnly)" 210 | ] 211 | }, 212 | { 213 | "cell_type": "code", 214 | "execution_count": 16, 215 | "metadata": {}, 216 | "outputs": [], 217 | "source": [ 218 | "# Create the IAM role (if not exists)\n", 219 | "\n", 220 | "try:\n", 221 | " print('1.1 Creating a new IAM Role')\n", 222 | " dwhRole = iam.create_role(\n", 223 | " Path='/',\n", 224 | " RoleName=DWH_IAM_ROLE_NAME,\n", 225 | " Description=\"Allow Redshift clusters to call AWS services on your behalf.\",\n", 226 | " AssumeRolePolicyDocument=json.dumps(\n", 227 | " {'Statement': [{'Action': 'sts:AssumeRole',\n", 228 | " 'Effect': 'Allow',\n", 229 | " 'Principal': {'Service': 'redshift.amazonaws.com'}}],\n", 230 | " 'Version': '2012-10-17'})\n", 231 | " )\n", 232 | " \n", 233 | "\n", 234 | "except Exception as e:\n", 235 | " print(e)\n" 236 | ] 237 | }, 238 | { 239 | "cell_type": "code", 240 | "execution_count": 17, 241 | "metadata": {}, 242 | "outputs": [], 243 | "source": [ 244 | "# Attach Policy\n", 245 | "\n", 246 | "print('1.2 Attaching Policy')\n", 247 | "iam.attach_role_policy(RoleName=DWH_IAM_ROLE_NAME,\n", 248 | " PolicyArn=\"arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess\"\n", 249 | " )['ResponseMetadata']['HTTPStatusCode']\n" 250 | ] 251 | }, 252 | { 253 | "cell_type": "code", 254 | "execution_count": 18, 255 | "metadata": {}, 256 | "outputs": [], 257 | "source": [ 258 | "# Get and print the IAM role ARN\n", 259 | "print('1.3 Get the IAM role ARN')\n", 260 | "iam_role = iam.get_role(\n", 261 | " RoleName=DWH_IAM_ROLE_NAME\n", 262 | " )\n", 263 | "roleArn = iam_role['Role']['Arn']\n", 264 | "# NOTE: Un-comment this to print the result.\n", 265 | "#print(roleArn)" 266 | ] 267 | }, 268 | { 269 | "cell_type": "markdown", 270 | "metadata": {}, 271 | "source": [ 272 | "## STEP 2: Redshift Cluster\n", 273 | "\n", 274 | "- Create a RedShift Cluster\n", 275 | "- For complete arguments to `create_cluster`, see [docs](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/redshift.html#Redshift.Client.create_cluster)" 276 | ] 277 | }, 278 | { 279 | "cell_type": "code", 280 | "execution_count": 44, 281 | "metadata": {}, 282 | "outputs": [], 283 | "source": [ 284 | "try:\n", 285 | " response = redshift.create_cluster( \n", 286 | " ClusterType=DWH_CLUSTER_TYPE,\n", 287 | " NodeType=DWH_NODE_TYPE,\n", 288 | " NumberOfNodes=int(DWH_NUM_NODES),\n", 289 | " DBName=DWH_DB,\n", 290 | " ClusterIdentifier=DWH_CLUSTER_IDENTIFIER,\n", 291 | " MasterUsername=DWH_DB_USER,\n", 292 | " MasterUserPassword=DWH_DB_PASSWORD,\n", 293 | " IamRoles=[roleArn]\n", 294 | " )\n", 295 | "except Exception as e:\n", 296 | " print(e)" 297 | ] 298 | }, 299 | { 300 | "cell_type": "markdown", 301 | "metadata": { 302 | "toc-hr-collapsed": true 303 | }, 304 | "source": [ 305 | "## 2.1 *Describe* the cluster to see its status\n", 306 | "- run this block several times until the cluster status becomes `Available`" 307 | ] 308 | }, 309 | { 310 | "cell_type": "code", 311 | "execution_count": 19, 312 | "metadata": {}, 313 | "outputs": [], 314 | "source": [ 315 | "def prettyRedshiftProps(props):\n", 316 | " pd.set_option('display.max_colwidth', -1)\n", 317 | " keysToShow = [\"ClusterIdentifier\", \"NodeType\", \"ClusterStatus\", \"MasterUsername\", \"DBName\", \"Endpoint\", \"NumberOfNodes\", 'VpcId']\n", 318 | " x = [(k, v) for k,v in props.items() if k in keysToShow]\n", 319 | " return pd.DataFrame(data=x, columns=[\"Key\", \"Value\"])\n", 320 | "\n", 321 | "myClusterProps = redshift.describe_clusters(ClusterIdentifier=DWH_CLUSTER_IDENTIFIER)['Clusters'][0]\n", 322 | "# NOTE: Un-comment this to print the result.\n", 323 | "#prettyRedshiftProps(myClusterProps)" 324 | ] 325 | }, 326 | { 327 | "cell_type": "markdown", 328 | "metadata": { 329 | "toc-hr-collapsed": true 330 | }, 331 | "source": [ 332 | "

2.2 Take note of the cluster endpoint and role ARN

" 333 | ] 334 | }, 335 | { 336 | "cell_type": "markdown", 337 | "metadata": {}, 338 | "source": [ 339 | "DO NOT RUN THIS unless the cluster status becomes \"Available\" " 340 | ] 341 | }, 342 | { 343 | "cell_type": "code", 344 | "execution_count": 21, 345 | "metadata": {}, 346 | "outputs": [], 347 | "source": [ 348 | "DWH_ENDPOINT = myClusterProps['Endpoint']['Address']\n", 349 | "DWH_ROLE_ARN = myClusterProps['IamRoles'][0]['IamRoleArn']\n", 350 | "\n", 351 | "print(\"DWH_ENDPOINT :: \", DWH_ENDPOINT)\n", 352 | "print(\"DWH_ROLE_ARN :: \", DWH_ROLE_ARN)" 353 | ] 354 | }, 355 | { 356 | "cell_type": "markdown", 357 | "metadata": {}, 358 | "source": [ 359 | "## STEP 3: Open an incoming TCP port to access the cluster endpoint" 360 | ] 361 | }, 362 | { 363 | "cell_type": "code", 364 | "execution_count": 22, 365 | "metadata": {}, 366 | "outputs": [], 367 | "source": [ 368 | "try:\n", 369 | " vpc = ec2.Vpc(id=myClusterProps['VpcId'])\n", 370 | " defaultSg = list(vpc.security_groups.all())[0]\n", 371 | " print(defaultSg)\n", 372 | " \n", 373 | " defaultSg.authorize_ingress(\n", 374 | " GroupName= defaultSg.group_name,\n", 375 | " CidrIp='0.0.0.0/0',\n", 376 | " IpProtocol='TCP', \n", 377 | " FromPort=int(DWH_PORT),\n", 378 | " ToPort=int(DWH_PORT)\n", 379 | " )\n", 380 | "except Exception as e:\n", 381 | " print(e)" 382 | ] 383 | }, 384 | { 385 | "cell_type": "markdown", 386 | "metadata": {}, 387 | "source": [ 388 | "## STEP 4: Make sure you can connect to the cluster" 389 | ] 390 | }, 391 | { 392 | "cell_type": "code", 393 | "execution_count": 23, 394 | "metadata": {}, 395 | "outputs": [], 396 | "source": [ 397 | "%load_ext sql" 398 | ] 399 | }, 400 | { 401 | "cell_type": "code", 402 | "execution_count": 68, 403 | "metadata": {}, 404 | "outputs": [], 405 | "source": [ 406 | "conn_string=\"postgresql://{}:{}@{}:{}/{}\".format(DWH_DB_USER, DWH_DB_PASSWORD, DWH_ENDPOINT, DWH_PORT,DWH_DB)\n", 407 | "# NOTE: Un-comment this to print the result.\n", 408 | "#print(conn_string)\n", 409 | "%sql $conn_string" 410 | ] 411 | }, 412 | { 413 | "cell_type": "markdown", 414 | "metadata": {}, 415 | "source": [ 416 | "## STEP 5: Test COPIED and INSERTED data" 417 | ] 418 | }, 419 | { 420 | "cell_type": "markdown", 421 | "metadata": {}, 422 | "source": [ 423 | "### 5.1: Query staging tables" 424 | ] 425 | }, 426 | { 427 | "cell_type": "code", 428 | "execution_count": null, 429 | "metadata": {}, 430 | "outputs": [], 431 | "source": [ 432 | "#%load_ext sql" 433 | ] 434 | }, 435 | { 436 | "cell_type": "code", 437 | "execution_count": 26, 438 | "metadata": {}, 439 | "outputs": [], 440 | "source": [ 441 | "# Number of items in staging_events table\n", 442 | "%%time\n", 443 | "%%sql\n", 444 | "SELECT COUNT(*)\n", 445 | "FROM staging_events;" 446 | ] 447 | }, 448 | { 449 | "cell_type": "code", 450 | "execution_count": null, 451 | "metadata": {}, 452 | "outputs": [], 453 | "source": [ 454 | "# Number of items in staging_songs table\n", 455 | "%%time\n", 456 | "%%sql\n", 457 | "SELECT COUNT(*)\n", 458 | "FROM staging_songs;" 459 | ] 460 | }, 461 | { 462 | "cell_type": "markdown", 463 | "metadata": {}, 464 | "source": [ 465 | "### 5.2 Query Analysis tables" 466 | ] 467 | }, 468 | { 469 | "cell_type": "code", 470 | "execution_count": null, 471 | "metadata": {}, 472 | "outputs": [], 473 | "source": [ 474 | "# Number of items in users table\n", 475 | "%%time\n", 476 | "%%sql\n", 477 | "SELECT COUNT(*)\n", 478 | "FROM users;" 479 | ] 480 | }, 481 | { 482 | "cell_type": "code", 483 | "execution_count": null, 484 | "metadata": {}, 485 | "outputs": [], 486 | "source": [ 487 | "# Number of items in songs table\n", 488 | "%%time\n", 489 | "%%sql\n", 490 | "SELECT COUNT(*)\n", 491 | "FROM songs;" 492 | ] 493 | }, 494 | { 495 | "cell_type": "code", 496 | "execution_count": null, 497 | "metadata": {}, 498 | "outputs": [], 499 | "source": [ 500 | "# Number of items in artists table\n", 501 | "%%time\n", 502 | "%%sql\n", 503 | "SELECT COUNT(*)\n", 504 | "FROM artists;" 505 | ] 506 | }, 507 | { 508 | "cell_type": "code", 509 | "execution_count": null, 510 | "metadata": {}, 511 | "outputs": [], 512 | "source": [ 513 | "# Number of items in time table\n", 514 | "%%time\n", 515 | "%%sql\n", 516 | "SELECT COUNT(*)\n", 517 | "FROM time;" 518 | ] 519 | }, 520 | { 521 | "cell_type": "code", 522 | "execution_count": null, 523 | "metadata": {}, 524 | "outputs": [], 525 | "source": [ 526 | "# Number of items in songplay table\n", 527 | "%%time\n", 528 | "%%sql\n", 529 | "SELECT COUNT(*)\n", 530 | "FROM songplays;" 531 | ] 532 | }, 533 | { 534 | "cell_type": "code", 535 | "execution_count": 29, 536 | "metadata": {}, 537 | "outputs": [], 538 | "source": [ 539 | "# Query to answer a question: Who played which song and when.\n", 540 | "%%time\n", 541 | "%%sql\n", 542 | "SELECT sp.songplay_id,\n", 543 | " u.user_id,\n", 544 | " u.last_name,\n", 545 | " u.first_name,\n", 546 | " sp.start_time,\n", 547 | " a.name,\n", 548 | " s.title\n", 549 | "FROM songplays AS sp\n", 550 | " JOIN users AS u ON (u.user_id = sp.user_id)\n", 551 | " JOIN songs AS s ON (s.song_id = sp.song_id)\n", 552 | " JOIN artists AS a ON (a.artist_id = sp.artist_id)\n", 553 | " JOIN time AS t ON (t.start_time = sp.start_time)\n", 554 | "ORDER BY (u.last_name)\n", 555 | "LIMIT 100;" 556 | ] 557 | }, 558 | { 559 | "cell_type": "markdown", 560 | "metadata": {}, 561 | "source": [ 562 | "## STEP 6: Clean up your resources" 563 | ] 564 | }, 565 | { 566 | "cell_type": "markdown", 567 | "metadata": {}, 568 | "source": [ 569 | "DO NOT RUN THIS UNLESS YOU ARE SURE
\n", 570 | " We will be using these resources in the next exercises
" 571 | ] 572 | }, 573 | { 574 | "cell_type": "code", 575 | "execution_count": 69, 576 | "metadata": {}, 577 | "outputs": [], 578 | "source": [ 579 | "#### CAREFUL!!\n", 580 | "#-- Uncomment & run to delete the created resources\n", 581 | "#redshift.delete_cluster( ClusterIdentifier=DWH_CLUSTER_IDENTIFIER, SkipFinalClusterSnapshot=True)\n", 582 | "#### CAREFUL!!" 583 | ] 584 | }, 585 | { 586 | "cell_type": "markdown", 587 | "metadata": {}, 588 | "source": [ 589 | "- run this block several times until the cluster really deleted" 590 | ] 591 | }, 592 | { 593 | "cell_type": "code", 594 | "execution_count": 27, 595 | "metadata": {}, 596 | "outputs": [], 597 | "source": [ 598 | "myClusterProps = redshift.describe_clusters(ClusterIdentifier=DWH_CLUSTER_IDENTIFIER)['Clusters'][0]\n", 599 | "# NOTE: Un-comment this to print the result.\n", 600 | "#prettyRedshiftProps(myClusterProps)" 601 | ] 602 | }, 603 | { 604 | "cell_type": "code", 605 | "execution_count": 28, 606 | "metadata": {}, 607 | "outputs": [], 608 | "source": [ 609 | "#### CAREFUL!!\n", 610 | "#-- Uncomment & run to delete the created resources\n", 611 | "#iam.detach_role_policy(RoleName=DWH_IAM_ROLE_NAME, PolicyArn=\"arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess\")\n", 612 | "#iam.delete_role(RoleName=DWH_IAM_ROLE_NAME)\n", 613 | "#### CAREFUL!!" 614 | ] 615 | } 616 | ], 617 | "metadata": { 618 | "kernelspec": { 619 | "display_name": "Python 3", 620 | "language": "python", 621 | "name": "python3" 622 | }, 623 | "language_info": { 624 | "codemirror_mode": { 625 | "name": "ipython", 626 | "version": 3 627 | }, 628 | "file_extension": ".py", 629 | "mimetype": "text/x-python", 630 | "name": "python", 631 | "nbconvert_exporter": "python", 632 | "pygments_lexer": "ipython3", 633 | "version": "3.6.8" 634 | }, 635 | "toc": { 636 | "base_numbering": 1, 637 | "nav_menu": {}, 638 | "number_sections": true, 639 | "sideBar": true, 640 | "skip_h1_title": false, 641 | "title_cell": "Table of Contents", 642 | "title_sidebar": "Contents", 643 | "toc_cell": false, 644 | "toc_position": {}, 645 | "toc_section_display": true, 646 | "toc_window_display": false 647 | }, 648 | "toc-autonumbering": false, 649 | "toc-showcode": false, 650 | "toc-showmarkdowntxt": false, 651 | "toc-showtags": false 652 | }, 653 | "nbformat": 4, 654 | "nbformat_minor": 2 655 | } 656 | -------------------------------------------------------------------------------- /data/log_data/2018-11-25-events.json: -------------------------------------------------------------------------------- 1 | {"artist":"matchbox twenty","auth":"Logged In","firstName":"Jayden","gender":"F","itemInSession":0,"lastName":"Duffy","length":177.65832,"level":"free","location":"Seattle-Tacoma-Bellevue, WA","method":"PUT","page":"NextSong","registration":1540146037796.0,"sessionId":846,"song":"Argue (LP Version)","status":200,"ts":1543109954796,"userAgent":"\"Mozilla\/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit\/537.51.2 (KHTML, like Gecko) Version\/7.0 Mobile\/11D257 Safari\/9537.53\"","userId":"76"} 2 | {"artist":"The Lonely Island \/ T-Pain","auth":"Logged In","firstName":"Jayden","gender":"F","itemInSession":1,"lastName":"Duffy","length":156.23791,"level":"free","location":"Seattle-Tacoma-Bellevue, WA","method":"PUT","page":"NextSong","registration":1540146037796.0,"sessionId":846,"song":"I'm On A Boat","status":200,"ts":1543110131796,"userAgent":"\"Mozilla\/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit\/537.51.2 (KHTML, like Gecko) Version\/7.0 Mobile\/11D257 Safari\/9537.53\"","userId":"76"} 3 | {"artist":null,"auth":"Logged In","firstName":"Jayden","gender":"F","itemInSession":2,"lastName":"Duffy","length":null,"level":"free","location":"Seattle-Tacoma-Bellevue, WA","method":"GET","page":"Home","registration":1540146037796.0,"sessionId":846,"song":null,"status":200,"ts":1543110132796,"userAgent":"\"Mozilla\/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit\/537.51.2 (KHTML, like Gecko) Version\/7.0 Mobile\/11D257 Safari\/9537.53\"","userId":"76"} 4 | {"artist":null,"auth":"Logged In","firstName":"Jayden","gender":"F","itemInSession":3,"lastName":"Duffy","length":null,"level":"free","location":"Seattle-Tacoma-Bellevue, WA","method":"GET","page":"Settings","registration":1540146037796.0,"sessionId":846,"song":null,"status":200,"ts":1543110168796,"userAgent":"\"Mozilla\/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit\/537.51.2 (KHTML, like Gecko) Version\/7.0 Mobile\/11D257 Safari\/9537.53\"","userId":"76"} 5 | {"artist":null,"auth":"Logged In","firstName":"Jayden","gender":"F","itemInSession":4,"lastName":"Duffy","length":null,"level":"free","location":"Seattle-Tacoma-Bellevue, WA","method":"PUT","page":"Save Settings","registration":1540146037796.0,"sessionId":846,"song":null,"status":307,"ts":1543110169796,"userAgent":"\"Mozilla\/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWebKit\/537.51.2 (KHTML, like Gecko) Version\/7.0 Mobile\/11D257 Safari\/9537.53\"","userId":"76"} 6 | {"artist":"John Mayer","auth":"Logged In","firstName":"Wyatt","gender":"M","itemInSession":0,"lastName":"Scott","length":275.27791,"level":"free","location":"Eureka-Arcata-Fortuna, CA","method":"PUT","page":"NextSong","registration":1540872073796.0,"sessionId":856,"song":"All We Ever Do Is Say Goodbye","status":200,"ts":1543113347796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; Trident\/7.0; rv:11.0) like Gecko","userId":"9"} 7 | {"artist":null,"auth":"Logged In","firstName":"Wyatt","gender":"M","itemInSession":1,"lastName":"Scott","length":null,"level":"free","location":"Eureka-Arcata-Fortuna, CA","method":"GET","page":"Home","registration":1540872073796.0,"sessionId":856,"song":null,"status":200,"ts":1543113365796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; Trident\/7.0; rv:11.0) like Gecko","userId":"9"} 8 | {"artist":"10_000 Maniacs","auth":"Logged In","firstName":"Wyatt","gender":"M","itemInSession":2,"lastName":"Scott","length":251.8722,"level":"free","location":"Eureka-Arcata-Fortuna, CA","method":"PUT","page":"NextSong","registration":1540872073796.0,"sessionId":856,"song":"Gun Shy (LP Version)","status":200,"ts":1543113622796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; Trident\/7.0; rv:11.0) like Gecko","userId":"9"} 9 | {"artist":"Leona Lewis","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":0,"lastName":"Cuevas","length":203.88526,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"Forgive Me","status":200,"ts":1543122348796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 10 | {"artist":"Nine Inch Nails","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":1,"lastName":"Cuevas","length":277.83791,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"La Mer","status":200,"ts":1543122551796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 11 | {"artist":"Audioslave","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":2,"lastName":"Cuevas","length":334.91546,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"I Am The Highway","status":200,"ts":1543122828796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 12 | {"artist":"Kid Rock","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":3,"lastName":"Cuevas","length":296.95955,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"All Summer Long (Album Version)","status":200,"ts":1543123162796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 13 | {"artist":"The Jets","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":4,"lastName":"Cuevas","length":220.89098,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"I Do You","status":200,"ts":1543123458796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 14 | {"artist":"The Gerbils","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":5,"lastName":"Cuevas","length":27.01016,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"(iii)","status":200,"ts":1543123678796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 15 | {"artist":"Damian Marley \/ Stephen Marley \/ Yami Bolo","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":6,"lastName":"Cuevas","length":304.69179,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"Still Searching","status":200,"ts":1543123705796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 16 | {"artist":null,"auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":7,"lastName":"Cuevas","length":null,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"GET","page":"Home","registration":1540940782796.0,"sessionId":916,"song":null,"status":200,"ts":1543124166796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 17 | {"artist":"The Bloody Beetroots","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":8,"lastName":"Cuevas","length":201.97832,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"Warp 1.9 (feat. Steve Aoki)","status":200,"ts":1543124951796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 18 | {"artist":null,"auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":9,"lastName":"Cuevas","length":null,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"GET","page":"Home","registration":1540940782796.0,"sessionId":916,"song":null,"status":200,"ts":1543125120796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 19 | {"artist":"The Specials","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":10,"lastName":"Cuevas","length":188.81261,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"Rat Race","status":200,"ts":1543125152796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 20 | {"artist":"The Lively Ones","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":11,"lastName":"Cuevas","length":142.52363,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"Walkin' The Board (LP Version)","status":200,"ts":1543125340796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 21 | {"artist":"Katie Melua","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":12,"lastName":"Cuevas","length":252.78649,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"Blues In The Night","status":200,"ts":1543125482796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 22 | {"artist":"Jason Mraz","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":13,"lastName":"Cuevas","length":243.48689,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"I'm Yours (Album Version)","status":200,"ts":1543125734796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 23 | {"artist":"Fisher","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":14,"lastName":"Cuevas","length":133.98159,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"Rianna","status":200,"ts":1543125977796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 24 | {"artist":"Zee Avi","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":15,"lastName":"Cuevas","length":160.62649,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"No Christmas For Me","status":200,"ts":1543126110796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 25 | {"artist":"Black Eyed Peas","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":16,"lastName":"Cuevas","length":289.12281,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"I Gotta Feeling","status":200,"ts":1543126270796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 26 | {"artist":"Emiliana Torrini","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":17,"lastName":"Cuevas","length":184.29342,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"Sunny Road","status":200,"ts":1543126559796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 27 | {"artist":null,"auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":18,"lastName":"Cuevas","length":null,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"GET","page":"Home","registration":1540940782796.0,"sessionId":916,"song":null,"status":200,"ts":1543126820796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 28 | {"artist":"Days Of The New","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":19,"lastName":"Cuevas","length":258.5073,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"The Down Town","status":200,"ts":1543128418796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 29 | {"artist":"Julio Iglesias duet with Willie Nelson","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":20,"lastName":"Cuevas","length":212.16608,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":916,"song":"To All The Girls I've Loved Before (With Julio Iglesias)","status":200,"ts":1543128676796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 30 | {"artist":null,"auth":"Logged In","firstName":"Jacqueline","gender":"F","itemInSession":0,"lastName":"Lynch","length":null,"level":"paid","location":"Atlanta-Sandy Springs-Roswell, GA","method":"GET","page":"Home","registration":1540223723796.0,"sessionId":914,"song":null,"status":200,"ts":1543133256796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.78.2 (KHTML, like Gecko) Version\/7.0.6 Safari\/537.78.2\"","userId":"29"} 31 | {"artist":"Jason Mraz & Colbie Caillat","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":0,"lastName":"Roth","length":189.6224,"level":"free","location":"Indianapolis-Carmel-Anderson, IN","method":"PUT","page":"NextSong","registration":1540699429796.0,"sessionId":704,"song":"Lucky (Album Version)","status":200,"ts":1543135208796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"78"} 32 | {"artist":null,"auth":"Logged In","firstName":"Anabelle","gender":"F","itemInSession":0,"lastName":"Simpson","length":null,"level":"free","location":"Philadelphia-Camden-Wilmington, PA-NJ-DE-MD","method":"GET","page":"Home","registration":1541044398796.0,"sessionId":901,"song":null,"status":200,"ts":1543145299796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"69"} 33 | {"artist":"R. Kelly","auth":"Logged In","firstName":"Anabelle","gender":"F","itemInSession":1,"lastName":"Simpson","length":234.39628,"level":"free","location":"Philadelphia-Camden-Wilmington, PA-NJ-DE-MD","method":"PUT","page":"NextSong","registration":1541044398796.0,"sessionId":901,"song":"The World's Greatest","status":200,"ts":1543145305796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"69"} 34 | {"artist":null,"auth":"Logged In","firstName":"Kynnedi","gender":"F","itemInSession":0,"lastName":"Sanchez","length":null,"level":"free","location":"Cedar Rapids, IA","method":"GET","page":"Home","registration":1541079034796.0,"sessionId":804,"song":null,"status":200,"ts":1543151224796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"89"} 35 | {"artist":"Jacky Terrasson","auth":"Logged In","firstName":"Marina","gender":"F","itemInSession":0,"lastName":"Sutton","length":342.7522,"level":"free","location":"Salinas, CA","method":"PUT","page":"NextSong","registration":1541064343796.0,"sessionId":373,"song":"Le Jardin d'Hiver","status":200,"ts":1543154200796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"48"} 36 | {"artist":"Papa Roach","auth":"Logged In","firstName":"Theodore","gender":"M","itemInSession":0,"lastName":"Harris","length":202.1873,"level":"free","location":"Red Bluff, CA","method":"PUT","page":"NextSong","registration":1541097374796.0,"sessionId":813,"song":"Alive","status":200,"ts":1543155228796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"14"} 37 | {"artist":"Burt Bacharach","auth":"Logged In","firstName":"Theodore","gender":"M","itemInSession":1,"lastName":"Harris","length":156.96934,"level":"free","location":"Red Bluff, CA","method":"PUT","page":"NextSong","registration":1541097374796.0,"sessionId":813,"song":"Casino Royale Theme (Main Title)","status":200,"ts":1543155430796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"14"} 38 | {"artist":null,"auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":0,"lastName":"Cuevas","length":null,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"GET","page":"Home","registration":1540940782796.0,"sessionId":923,"song":null,"status":200,"ts":1543161483796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 39 | {"artist":"Floetry","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":1,"lastName":"Cuevas","length":254.48444,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":923,"song":"Sunshine","status":200,"ts":1543161985796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 40 | {"artist":"The Rakes","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":2,"lastName":"Cuevas","length":225.2273,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":923,"song":"Leave The City And Come Home","status":200,"ts":1543162239796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 41 | {"artist":"Dwight Yoakam","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":3,"lastName":"Cuevas","length":239.3073,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":923,"song":"You're The One","status":200,"ts":1543162464796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 42 | {"artist":"Ween","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":4,"lastName":"Cuevas","length":228.10077,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":923,"song":"Voodoo Lady","status":200,"ts":1543162703796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 43 | {"artist":"Caf\u00c3\u0083\u00c2\u00a9 Quijano","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":5,"lastName":"Cuevas","length":197.32853,"level":"paid","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":923,"song":"La Lola","status":200,"ts":1543162931796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 44 | {"artist":null,"auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":0,"lastName":"Roth","length":null,"level":"free","location":"Indianapolis-Carmel-Anderson, IN","method":"GET","page":"Home","registration":1540699429796.0,"sessionId":925,"song":null,"status":200,"ts":1543166945796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"78"} 45 | {"artist":"Parov Stelar","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":1,"lastName":"Roth","length":203.65016,"level":"free","location":"Indianapolis-Carmel-Anderson, IN","method":"PUT","page":"NextSong","registration":1540699429796.0,"sessionId":925,"song":"Good Bye Emily (feat. Gabriella Hanninen)","status":200,"ts":1543166945796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"78"} 46 | {"artist":null,"auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":2,"lastName":"Roth","length":null,"level":"free","location":"Indianapolis-Carmel-Anderson, IN","method":"GET","page":"Home","registration":1540699429796.0,"sessionId":925,"song":null,"status":200,"ts":1543166953796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"78"} 47 | {"artist":null,"auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":0,"lastName":"Levine","length":null,"level":"paid","location":"Portland-South Portland, ME","method":"GET","page":"Home","registration":1540794356796.0,"sessionId":915,"song":null,"status":200,"ts":1543169974796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 48 | {"artist":"Bryan Adams","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":1,"lastName":"Levine","length":166.29506,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":915,"song":"I Will Always Return","status":200,"ts":1543170092796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 49 | {"artist":"KT Tunstall","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":2,"lastName":"Levine","length":192.31302,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":915,"song":"White Bird","status":200,"ts":1543170258796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 50 | {"artist":"Technicolour","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":3,"lastName":"Levine","length":235.12771,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":915,"song":"Turn Away","status":200,"ts":1543170450796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 51 | {"artist":"The Dears","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":4,"lastName":"Levine","length":289.95873,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":915,"song":"Lost In The Plot","status":200,"ts":1543170685796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 52 | {"artist":"Go West","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":5,"lastName":"Levine","length":259.49995,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":915,"song":"Never Let Them See You Sweat","status":200,"ts":1543170974796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 53 | {"artist":null,"auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":6,"lastName":"Levine","length":null,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"Logout","registration":1540794356796.0,"sessionId":915,"song":null,"status":307,"ts":1543170975796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 54 | {"artist":null,"auth":"Logged In","firstName":"Sylvie","gender":"F","itemInSession":0,"lastName":"Cruz","length":null,"level":"free","location":"Washington-Arlington-Alexandria, DC-VA-MD-WV","method":"GET","page":"Home","registration":1540266185796.0,"sessionId":912,"song":null,"status":200,"ts":1543170999796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"10"} 55 | {"artist":null,"auth":"Logged Out","firstName":null,"gender":null,"itemInSession":7,"lastName":null,"length":null,"level":"paid","location":null,"method":"GET","page":"Home","registration":null,"sessionId":915,"song":null,"status":200,"ts":1543171228796,"userAgent":null,"userId":""} 56 | {"artist":"Gondwana","auth":"Logged In","firstName":"Jordan","gender":"F","itemInSession":0,"lastName":"Hicks","length":262.5824,"level":"free","location":"Salinas, CA","method":"PUT","page":"NextSong","registration":1540008898796.0,"sessionId":814,"song":"Mi Princesa","status":200,"ts":1543189690796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.78.2 (KHTML, like Gecko) Version\/7.0.6 Safari\/537.78.2\"","userId":"37"} 57 | {"artist":null,"auth":"Logged In","firstName":"Kevin","gender":"M","itemInSession":0,"lastName":"Arellano","length":null,"level":"free","location":"Harrisburg-Carlisle, PA","method":"GET","page":"Home","registration":1540006905796.0,"sessionId":855,"song":null,"status":200,"ts":1543189812796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"66"} 58 | {"artist":"Ella Fitzgerald","auth":"Logged In","firstName":"Jordan","gender":"F","itemInSession":1,"lastName":"Hicks","length":427.15383,"level":"free","location":"Salinas, CA","method":"PUT","page":"NextSong","registration":1540008898796.0,"sessionId":814,"song":"On Green Dolphin Street (Medley) (1999 Digital Remaster)","status":200,"ts":1543189952796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.78.2 (KHTML, like Gecko) Version\/7.0.6 Safari\/537.78.2\"","userId":"37"} 59 | {"artist":"Creedence Clearwater Revival","auth":"Logged In","firstName":"Jordan","gender":"F","itemInSession":2,"lastName":"Hicks","length":184.73751,"level":"free","location":"Salinas, CA","method":"PUT","page":"NextSong","registration":1540008898796.0,"sessionId":814,"song":"Run Through The Jungle","status":200,"ts":1543190379796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.78.2 (KHTML, like Gecko) Version\/7.0.6 Safari\/537.78.2\"","userId":"37"} -------------------------------------------------------------------------------- /data/log_data/2018-11-11-events.json: -------------------------------------------------------------------------------- 1 | {"artist":"Frumpies","auth":"Logged In","firstName":"Anabelle","gender":"F","itemInSession":0,"lastName":"Simpson","length":134.47791,"level":"free","location":"Philadelphia-Camden-Wilmington, PA-NJ-DE-MD","method":"PUT","page":"NextSong","registration":1541044398796.0,"sessionId":455,"song":"Fuck Kitty","status":200,"ts":1541903636796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"69"} 2 | {"artist":"Kenny G with Peabo Bryson","auth":"Logged In","firstName":"Anabelle","gender":"F","itemInSession":1,"lastName":"Simpson","length":264.75057,"level":"free","location":"Philadelphia-Camden-Wilmington, PA-NJ-DE-MD","method":"PUT","page":"NextSong","registration":1541044398796.0,"sessionId":455,"song":"By The Time This Night Is Over","status":200,"ts":1541903770796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"69"} 3 | {"artist":"Biffy Clyro","auth":"Logged In","firstName":"Anabelle","gender":"F","itemInSession":2,"lastName":"Simpson","length":189.83138,"level":"free","location":"Philadelphia-Camden-Wilmington, PA-NJ-DE-MD","method":"PUT","page":"NextSong","registration":1541044398796.0,"sessionId":455,"song":"God & Satan","status":200,"ts":1541904034796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"69"} 4 | {"artist":null,"auth":"Logged In","firstName":"Lily","gender":"F","itemInSession":0,"lastName":"Burns","length":null,"level":"free","location":"New York-Newark-Jersey City, NY-NJ-PA","method":"GET","page":"Home","registration":1540621059796.0,"sessionId":456,"song":null,"status":200,"ts":1541910841796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"32"} 5 | {"artist":"HIM","auth":"Logged In","firstName":"Lily","gender":"F","itemInSession":1,"lastName":"Burns","length":212.06159,"level":"free","location":"New York-Newark-Jersey City, NY-NJ-PA","method":"PUT","page":"NextSong","registration":1540621059796.0,"sessionId":456,"song":"Beautiful","status":200,"ts":1541910973796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"32"} 6 | {"artist":"Matmos","auth":"Logged In","firstName":"Joseph","gender":"M","itemInSession":0,"lastName":"Gutierrez","length":1449.11628,"level":"free","location":"Columbia, SC","method":"PUT","page":"NextSong","registration":1540809335796.0,"sessionId":284,"song":"Supreme Balloon","status":200,"ts":1541911006796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\/537.75.14 (KHTML, like Gecko) Version\/7.0.3 Safari\/537.75.14\"","userId":"75"} 7 | {"artist":"Gary Allan","auth":"Logged In","firstName":"Ryann","gender":"F","itemInSession":0,"lastName":"Smith","length":259.83955,"level":"free","location":"Palestine, TX","method":"PUT","page":"NextSong","registration":1540685147796.0,"sessionId":328,"song":"The One","status":200,"ts":1541930188796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"92"} 8 | {"artist":"Miracle Fortress","auth":"Logged In","firstName":"Ryann","gender":"F","itemInSession":1,"lastName":"Smith","length":200.9073,"level":"free","location":"Palestine, TX","method":"PUT","page":"NextSong","registration":1540685147796.0,"sessionId":328,"song":"Five Roses","status":200,"ts":1541930447796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"92"} 9 | {"artist":"Don Omar","auth":"Logged In","firstName":"Ryann","gender":"F","itemInSession":2,"lastName":"Smith","length":261.35465,"level":"free","location":"Palestine, TX","method":"PUT","page":"NextSong","registration":1540685147796.0,"sessionId":328,"song":"Cuentale","status":200,"ts":1541930647796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"92"} 10 | {"artist":"Jay-Z","auth":"Logged In","firstName":"Ryann","gender":"F","itemInSession":3,"lastName":"Smith","length":212.27057,"level":"free","location":"Palestine, TX","method":"PUT","page":"NextSong","registration":1540685147796.0,"sessionId":328,"song":"D'Evils","status":200,"ts":1541930908796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"92"} 11 | {"artist":"Red Hot Chili Peppers","auth":"Logged In","firstName":"Ryann","gender":"F","itemInSession":4,"lastName":"Smith","length":231.33995,"level":"free","location":"Palestine, TX","method":"PUT","page":"NextSong","registration":1540685147796.0,"sessionId":328,"song":"Easily (Album Version)","status":200,"ts":1541931120796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"92"} 12 | {"artist":null,"auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":0,"lastName":"Cuevas","length":null,"level":"free","location":"San Francisco-Oakland-Hayward, CA","method":"GET","page":"Home","registration":1540940782796.0,"sessionId":437,"song":null,"status":200,"ts":1541932052796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 13 | {"artist":"Flogging Molly","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":1,"lastName":"Cuevas","length":361.9522,"level":"free","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":437,"song":"Rebels of the Sacred Heart","status":200,"ts":1541932063796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 14 | {"artist":"Reverend Horton Heat","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":2,"lastName":"Cuevas","length":158.64118,"level":"free","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":437,"song":"Now_ Right Now","status":200,"ts":1541932424796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 15 | {"artist":"Sea Wolf","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":3,"lastName":"Cuevas","length":232.61995,"level":"free","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":437,"song":"I Made A Resolution","status":200,"ts":1541932582796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 16 | {"artist":"Jason Mraz & Colbie Caillat","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":4,"lastName":"Cuevas","length":189.6224,"level":"free","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":437,"song":"Lucky (Album Version)","status":200,"ts":1541932814796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 17 | {"artist":"Jamie Lidell","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":5,"lastName":"Cuevas","length":175.25506,"level":"free","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":437,"song":"Enough\u0019s Enough","status":200,"ts":1541933003796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 18 | {"artist":"Feist","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":6,"lastName":"Cuevas","length":212.79302,"level":"free","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":437,"song":"Mushaboom (Postal Service Mix)","status":200,"ts":1541933178796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 19 | {"artist":null,"auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":7,"lastName":"Cuevas","length":null,"level":"free","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"Logout","registration":1540940782796.0,"sessionId":437,"song":null,"status":307,"ts":1541933179796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 20 | {"artist":null,"auth":"Logged Out","firstName":null,"gender":null,"itemInSession":8,"lastName":null,"length":null,"level":"free","location":null,"method":"GET","page":"Home","registration":null,"sessionId":437,"song":null,"status":200,"ts":1541933298796,"userAgent":null,"userId":""} 21 | {"artist":null,"auth":"Logged Out","firstName":null,"gender":null,"itemInSession":9,"lastName":null,"length":null,"level":"free","location":null,"method":"GET","page":"Home","registration":null,"sessionId":437,"song":null,"status":200,"ts":1541934031796,"userAgent":null,"userId":""} 22 | {"artist":null,"auth":"Logged Out","firstName":null,"gender":null,"itemInSession":10,"lastName":null,"length":null,"level":"free","location":null,"method":"PUT","page":"Login","registration":null,"sessionId":437,"song":null,"status":307,"ts":1541934032796,"userAgent":null,"userId":""} 23 | {"artist":null,"auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":11,"lastName":"Cuevas","length":null,"level":"free","location":"San Francisco-Oakland-Hayward, CA","method":"GET","page":"Home","registration":1540940782796.0,"sessionId":437,"song":null,"status":200,"ts":1541934168796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 24 | {"artist":"Sex Slaves","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":12,"lastName":"Cuevas","length":175.51628,"level":"free","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":437,"song":"We're Going Out Tonight","status":200,"ts":1541934891796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 25 | {"artist":null,"auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":0,"lastName":"Cuevas","length":null,"level":"free","location":"San Francisco-Oakland-Hayward, CA","method":"GET","page":"Home","registration":1540940782796.0,"sessionId":469,"song":null,"status":200,"ts":1541943439796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 26 | {"artist":"Rise Against","auth":"Logged In","firstName":"Chloe","gender":"F","itemInSession":1,"lastName":"Cuevas","length":169.482,"level":"free","location":"San Francisco-Oakland-Hayward, CA","method":"PUT","page":"NextSong","registration":1540940782796.0,"sessionId":469,"song":"To Them These Streets Belong","status":200,"ts":1541943682796,"userAgent":"Mozilla\/5.0 (Windows NT 5.1; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"49"} 27 | {"artist":null,"auth":"Logged In","firstName":"Mohammad","gender":"M","itemInSession":0,"lastName":"Rodriguez","length":null,"level":"free","location":"Sacramento--Roseville--Arden-Arcade, CA","method":"GET","page":"Home","registration":1540511766796.0,"sessionId":441,"song":null,"status":200,"ts":1541944080796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"88"} 28 | {"artist":"Beyonc\u00c3\u0083\u00c2\u00a9","auth":"Logged In","firstName":"Mohammad","gender":"M","itemInSession":1,"lastName":"Rodriguez","length":359.54893,"level":"free","location":"Sacramento--Roseville--Arden-Arcade, CA","method":"PUT","page":"NextSong","registration":1540511766796.0,"sessionId":441,"song":"Get Me Bodied","status":200,"ts":1541944343796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"88"} 29 | {"artist":"Nate Dogg","auth":"Logged In","firstName":"Mohammad","gender":"M","itemInSession":2,"lastName":"Rodriguez","length":356.38812,"level":"free","location":"Sacramento--Roseville--Arden-Arcade, CA","method":"PUT","page":"NextSong","registration":1540511766796.0,"sessionId":441,"song":"Never Leave Me Alone","status":200,"ts":1541944702796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"88"} 30 | {"artist":null,"auth":"Logged In","firstName":"Cierra","gender":"F","itemInSession":0,"lastName":"Finley","length":null,"level":"free","location":"Richmond, VA","method":"GET","page":"Home","registration":1541013292796.0,"sessionId":443,"song":null,"status":200,"ts":1541945130796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"96"} 31 | {"artist":"Taylor Swift","auth":"Logged In","firstName":"Cierra","gender":"F","itemInSession":1,"lastName":"Finley","length":233.89995,"level":"free","location":"Richmond, VA","method":"PUT","page":"NextSong","registration":1541013292796.0,"sessionId":443,"song":"Love Story","status":200,"ts":1541945143796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"96"} 32 | {"artist":"Lynyrd Skynyrd","auth":"Logged In","firstName":"Ryan","gender":"M","itemInSession":0,"lastName":"Smith","length":216.60689,"level":"free","location":"San Jose-Sunnyvale-Santa Clara, CA","method":"PUT","page":"NextSong","registration":1541016707796.0,"sessionId":452,"song":"Sweet home Alabama","status":200,"ts":1541945274796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/36.0.1985.125 Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"26"} 33 | {"artist":"Kelis","auth":"Logged In","firstName":"Cierra","gender":"F","itemInSession":2,"lastName":"Finley","length":293.58975,"level":"free","location":"Richmond, VA","method":"PUT","page":"NextSong","registration":1541013292796.0,"sessionId":443,"song":"Caught Out There (Explicit)","status":200,"ts":1541945376796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"96"} 34 | {"artist":"The Kills","auth":"Logged In","firstName":"Cierra","gender":"F","itemInSession":3,"lastName":"Finley","length":203.38893,"level":"free","location":"Richmond, VA","method":"PUT","page":"NextSong","registration":1541013292796.0,"sessionId":443,"song":"Last Day Of Magic","status":200,"ts":1541945669796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"96"} 35 | {"artist":null,"auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":0,"lastName":"Kirby","length":null,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"GET","page":"Home","registration":1541022995796.0,"sessionId":448,"song":null,"status":200,"ts":1541945702796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 36 | {"artist":"Collie Buddz featuring Paul Wall","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":1,"lastName":"Kirby","length":271.62077,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":448,"song":"What A Feeling","status":200,"ts":1541945706796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 37 | {"artist":"Charttraxx Karaoke","auth":"Logged In","firstName":"Cierra","gender":"F","itemInSession":4,"lastName":"Finley","length":225.17506,"level":"free","location":"Richmond, VA","method":"PUT","page":"NextSong","registration":1541013292796.0,"sessionId":443,"song":"Fireflies","status":200,"ts":1541945872796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"96"} 38 | {"artist":"Band Of Horses","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":2,"lastName":"Kirby","length":321.14893,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":448,"song":"The Funeral (Album Version)","status":200,"ts":1541945977796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 39 | {"artist":"Coldplay","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":3,"lastName":"Kirby","length":307.51302,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":448,"song":"Clocks","status":200,"ts":1541946298796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 40 | {"artist":"Bon Jovi","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":4,"lastName":"Kirby","length":228.75383,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":448,"song":"Have A Nice Day","status":200,"ts":1541946605796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 41 | {"artist":"P.O.D.","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":5,"lastName":"Kirby","length":203.7024,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":448,"song":"Alive (2006 Remastered Album Version)","status":200,"ts":1541946833796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 42 | {"artist":"Bloc Party","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":6,"lastName":"Kirby","length":222.04036,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":448,"song":"Plans (Replanned by Mogwai)","status":200,"ts":1541947036796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 43 | {"artist":"Los Prisioneros","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":7,"lastName":"Kirby","length":211.12118,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":448,"song":"Pa Pa Pa","status":200,"ts":1541947258796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 44 | {"artist":"Octopus Project","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":8,"lastName":"Kirby","length":175.25506,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":448,"song":"Lots More Stairs","status":200,"ts":1541947469796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 45 | {"artist":"Roudoudou","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":9,"lastName":"Kirby","length":18.41587,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":448,"song":"Ecoute Ce Scratch","status":200,"ts":1541947644796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 46 | {"artist":"Africando","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":10,"lastName":"Kirby","length":253.54404,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":448,"song":"Tierra Tradicional","status":200,"ts":1541947662796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 47 | {"artist":"RUN-DMC Featuring Method Man_ Kenny Cash_ Mike Ransom_ and Jamel Simmons","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":11,"lastName":"Kirby","length":266.52689,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":448,"song":"Simmons Incorporated","status":200,"ts":1541947915796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 48 | {"artist":null,"auth":"Logged In","firstName":"Colm","gender":"M","itemInSession":0,"lastName":"Santana","length":null,"level":"free","location":"Nashville-Davidson--Murfreesboro--Franklin, TN","method":"GET","page":"Home","registration":1540856629796.0,"sessionId":414,"song":null,"status":200,"ts":1541948035796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"67"} 49 | {"artist":"Graham Coxon","auth":"Logged In","firstName":"Colm","gender":"M","itemInSession":1,"lastName":"Santana","length":197.14567,"level":"free","location":"Nashville-Davidson--Murfreesboro--Franklin, TN","method":"PUT","page":"NextSong","registration":1540856629796.0,"sessionId":414,"song":"I'm Goin' Away","status":200,"ts":1541948047796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"67"} 50 | {"artist":"Queens Of The Stone Age","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":12,"lastName":"Kirby","length":231.02649,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":448,"song":"In The Fade","status":200,"ts":1541948181796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 51 | {"artist":"Dance Gavin Dance","auth":"Logged In","firstName":"Colm","gender":"M","itemInSession":2,"lastName":"Santana","length":193.30567,"level":"free","location":"Nashville-Davidson--Murfreesboro--Franklin, TN","method":"PUT","page":"NextSong","registration":1540856629796.0,"sessionId":414,"song":"Strawberry Andr\u00c3\u0083\u00c2\u00a9 (Album Version)","status":200,"ts":1541948244796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"67"} 52 | {"artist":null,"auth":"Logged In","firstName":"Colm","gender":"M","itemInSession":3,"lastName":"Santana","length":null,"level":"free","location":"Nashville-Davidson--Murfreesboro--Franklin, TN","method":"GET","page":"Home","registration":1540856629796.0,"sessionId":414,"song":null,"status":200,"ts":1541948258796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"67"} 53 | {"artist":"Passion Pit","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":13,"lastName":"Kirby","length":243.69587,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":448,"song":"Eyes As Candles","status":200,"ts":1541948412796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 54 | {"artist":null,"auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":14,"lastName":"Kirby","length":null,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"GET","page":"Home","registration":1541022995796.0,"sessionId":448,"song":null,"status":200,"ts":1541948426796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 55 | {"artist":"Black Eyed Peas","auth":"Logged In","firstName":"Colm","gender":"M","itemInSession":4,"lastName":"Santana","length":229.61587,"level":"free","location":"Nashville-Davidson--Murfreesboro--Franklin, TN","method":"PUT","page":"NextSong","registration":1540856629796.0,"sessionId":414,"song":"Let's Get It Started","status":200,"ts":1541948437796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"67"} 56 | {"artist":"Plastic Bertrand","auth":"Logged In","firstName":"Colm","gender":"M","itemInSession":5,"lastName":"Santana","length":180.00934,"level":"free","location":"Nashville-Davidson--Murfreesboro--Franklin, TN","method":"PUT","page":"NextSong","registration":1540856629796.0,"sessionId":414,"song":"Ca plane pour moi","status":200,"ts":1541948666796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"67"} 57 | {"artist":"Cream","auth":"Logged In","firstName":"Colm","gender":"M","itemInSession":6,"lastName":"Santana","length":166.5824,"level":"free","location":"Nashville-Davidson--Murfreesboro--Franklin, TN","method":"PUT","page":"NextSong","registration":1540856629796.0,"sessionId":414,"song":"Strange Brew","status":200,"ts":1541948846796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"67"} 58 | {"artist":"Coldplay","auth":"Logged In","firstName":"Colm","gender":"M","itemInSession":7,"lastName":"Santana","length":284.39465,"level":"free","location":"Nashville-Davidson--Murfreesboro--Franklin, TN","method":"PUT","page":"NextSong","registration":1540856629796.0,"sessionId":414,"song":"A Message","status":200,"ts":1541949012796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"67"} 59 | {"artist":"Cute Is What We Aim For","auth":"Logged In","firstName":"Colm","gender":"M","itemInSession":8,"lastName":"Santana","length":172.22485,"level":"free","location":"Nashville-Davidson--Murfreesboro--Franklin, TN","method":"PUT","page":"NextSong","registration":1540856629796.0,"sessionId":414,"song":"Sweat the Battle Before the Battle Sweats You (Album Version)","status":200,"ts":1541949296796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"67"} 60 | {"artist":"Metallica","auth":"Logged In","firstName":"Connar","gender":"M","itemInSession":0,"lastName":"Moreno","length":256.9922,"level":"free","location":"Houston-The Woodlands-Sugar Land, TX","method":"PUT","page":"NextSong","registration":1540823606796.0,"sessionId":218,"song":"Of Wolf And Man","status":200,"ts":1541952079796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit\/538.46 (KHTML, like Gecko) Version\/8.0 Safari\/538.46\"","userId":"62"} 61 | {"artist":"The Kills","auth":"Logged In","firstName":"Connar","gender":"M","itemInSession":1,"lastName":"Moreno","length":217.70404,"level":"free","location":"Houston-The Woodlands-Sugar Land, TX","method":"PUT","page":"NextSong","registration":1540823606796.0,"sessionId":218,"song":"Tape Song","status":200,"ts":1541952335796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit\/538.46 (KHTML, like Gecko) Version\/8.0 Safari\/538.46\"","userId":"62"} 62 | {"artist":"Foo Fighters","auth":"Logged In","firstName":"Connar","gender":"M","itemInSession":2,"lastName":"Moreno","length":271.38567,"level":"free","location":"Houston-The Woodlands-Sugar Land, TX","method":"PUT","page":"NextSong","registration":1540823606796.0,"sessionId":218,"song":"The Pretender","status":200,"ts":1541952552796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit\/538.46 (KHTML, like Gecko) Version\/8.0 Safari\/538.46\"","userId":"62"} 63 | {"artist":"Plaid","auth":"Logged In","firstName":"Connar","gender":"M","itemInSession":3,"lastName":"Moreno","length":260.96281,"level":"free","location":"Houston-The Woodlands-Sugar Land, TX","method":"PUT","page":"NextSong","registration":1540823606796.0,"sessionId":218,"song":"Eyen [Chosen by fans on Warp20.net]","status":200,"ts":1541952823796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit\/538.46 (KHTML, like Gecko) Version\/8.0 Safari\/538.46\"","userId":"62"} 64 | {"artist":null,"auth":"Logged In","firstName":"Brayden","gender":"M","itemInSession":0,"lastName":"Clark","length":null,"level":"free","location":"New York-Newark-Jersey City, NY-NJ-PA","method":"GET","page":"Home","registration":1541029236796.0,"sessionId":120,"song":null,"status":200,"ts":1541954601796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"41"} 65 | {"artist":null,"auth":"Logged In","firstName":"Theodore","gender":"M","itemInSession":0,"lastName":"Harris","length":null,"level":"free","location":"Red Bluff, CA","method":"GET","page":"Home","registration":1541097374796.0,"sessionId":462,"song":null,"status":200,"ts":1541959679796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"14"} 66 | {"artist":"The Van Pelt","auth":"Logged In","firstName":"Theodore","gender":"M","itemInSession":1,"lastName":"Harris","length":208.71791,"level":"free","location":"Red Bluff, CA","method":"PUT","page":"NextSong","registration":1541097374796.0,"sessionId":462,"song":"It's New To Me","status":200,"ts":1541959713796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"14"} 67 | {"artist":null,"auth":"Logged In","firstName":"Ryan","gender":"M","itemInSession":0,"lastName":"Smith","length":null,"level":"free","location":"San Jose-Sunnyvale-Santa Clara, CA","method":"GET","page":"Home","registration":1541016707796.0,"sessionId":472,"song":null,"status":200,"ts":1541962018796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/36.0.1985.125 Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"26"} 68 | {"artist":"+44","auth":"Logged In","firstName":"Ryan","gender":"M","itemInSession":1,"lastName":"Smith","length":224.57424,"level":"free","location":"San Jose-Sunnyvale-Santa Clara, CA","method":"PUT","page":"NextSong","registration":1541016707796.0,"sessionId":472,"song":"Make You Smile","status":200,"ts":1541962092796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/36.0.1985.125 Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"26"} 69 | {"artist":null,"auth":"Logged In","firstName":"Rylan","gender":"M","itemInSession":0,"lastName":"George","length":null,"level":"free","location":"Birmingham-Hoover, AL","method":"GET","page":"Home","registration":1541020249796.0,"sessionId":446,"song":null,"status":200,"ts":1541962134796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"16"} 70 | {"artist":"Chris Brown","auth":"Logged In","firstName":"Rylan","gender":"M","itemInSession":1,"lastName":"George","length":275.1473,"level":"free","location":"Birmingham-Hoover, AL","method":"PUT","page":"NextSong","registration":1541020249796.0,"sessionId":446,"song":"I May Never Find","status":200,"ts":1541962141796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"16"} 71 | {"artist":"KT Tunstall","auth":"Logged In","firstName":"Ryan","gender":"M","itemInSession":2,"lastName":"Smith","length":170.47465,"level":"free","location":"San Jose-Sunnyvale-Santa Clara, CA","method":"PUT","page":"NextSong","registration":1541016707796.0,"sessionId":472,"song":"Black Horse And The Cherry Tree (Radio Version)","status":200,"ts":1541962316796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/36.0.1985.125 Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"26"} 72 | {"artist":"Cascada","auth":"Logged In","firstName":"Rylan","gender":"M","itemInSession":2,"lastName":"George","length":184.39791,"level":"free","location":"Birmingham-Hoover, AL","method":"PUT","page":"NextSong","registration":1541020249796.0,"sessionId":446,"song":"Kids In America","status":200,"ts":1541962416796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"16"} 73 | {"artist":"Incubus","auth":"Logged In","firstName":"Ryan","gender":"M","itemInSession":3,"lastName":"Smith","length":293.38077,"level":"free","location":"San Jose-Sunnyvale-Santa Clara, CA","method":"PUT","page":"NextSong","registration":1541016707796.0,"sessionId":472,"song":"Black Heart Inertia","status":200,"ts":1541962486796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/36.0.1985.125 Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"26"} 74 | {"artist":null,"auth":"Logged In","firstName":"Ryan","gender":"M","itemInSession":4,"lastName":"Smith","length":null,"level":"free","location":"San Jose-Sunnyvale-Santa Clara, CA","method":"GET","page":"Help","registration":1541016707796.0,"sessionId":472,"song":null,"status":200,"ts":1541962633796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/36.0.1985.125 Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"26"} 75 | {"artist":null,"auth":"Logged In","firstName":"Ryan","gender":"M","itemInSession":5,"lastName":"Smith","length":null,"level":"free","location":"San Jose-Sunnyvale-Santa Clara, CA","method":"GET","page":"Home","registration":1541016707796.0,"sessionId":472,"song":null,"status":200,"ts":1541962656796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/36.0.1985.125 Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"26"} 76 | {"artist":null,"auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":0,"lastName":"Levine","length":null,"level":"paid","location":"Portland-South Portland, ME","method":"GET","page":"Home","registration":1540794356796.0,"sessionId":435,"song":null,"status":200,"ts":1541965304796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 77 | {"artist":"Miike Snow","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":1,"lastName":"Levine","length":220.83873,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":435,"song":"Black & Blue","status":200,"ts":1541965305796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 78 | {"artist":"Cartola","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":2,"lastName":"Levine","length":208.92689,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":435,"song":"Sala De Recep\u00c3\u0083\u00c2\u00a7\u00c3\u0083\u00c2\u00a3o","status":200,"ts":1541965525796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 79 | {"artist":"Kill The Client","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":3,"lastName":"Levine","length":70.68689,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":435,"song":"Commander In Thief","status":200,"ts":1541965733796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 80 | {"artist":null,"auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":4,"lastName":"Levine","length":null,"level":"paid","location":"Portland-South Portland, ME","method":"GET","page":"Home","registration":1540794356796.0,"sessionId":435,"song":null,"status":200,"ts":1541965947796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 81 | {"artist":"Wolfmother","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":5,"lastName":"Levine","length":175.82975,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":435,"song":"Woman","status":200,"ts":1541966183796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 82 | {"artist":"Old Crow Medicine Show","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":6,"lastName":"Levine","length":231.73179,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":435,"song":"Wagon Wheel","status":200,"ts":1541966358796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 83 | {"artist":"Architecture In Helsinki","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":7,"lastName":"Levine","length":173.73995,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":435,"song":"Debbie","status":200,"ts":1541966589796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 84 | {"artist":"Charlie Louvin","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":8,"lastName":"Levine","length":170.86649,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":435,"song":"I Think I'll Live","status":200,"ts":1541966762796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 85 | {"artist":"Miguel Morales","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":9,"lastName":"Levine","length":270.78485,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":435,"song":"La Derrota de Un Don Juan","status":200,"ts":1541966932796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 86 | {"artist":"Dominique A","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":10,"lastName":"Levine","length":153.20771,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":435,"song":"Le Courage Des Oiseaux","status":200,"ts":1541967202796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 87 | {"artist":"Cock Sparrer","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":11,"lastName":"Levine","length":203.25832,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":435,"song":"Run With The Blind","status":200,"ts":1541967355796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 88 | {"artist":"Jimmy Wakely","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":12,"lastName":"Levine","length":165.74649,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":435,"song":"I Love You So Much It Hurts","status":200,"ts":1541967558796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 89 | {"artist":"Peter Doherty","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":13,"lastName":"Levine","length":217.02485,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":435,"song":"A Little Death Around the Eyes","status":200,"ts":1541967723796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 90 | {"artist":"Katy Perry","auth":"Logged In","firstName":"Tegan","gender":"F","itemInSession":14,"lastName":"Levine","length":246.41261,"level":"paid","location":"Portland-South Portland, ME","method":"PUT","page":"NextSong","registration":1540794356796.0,"sessionId":435,"song":"Thinking Of You","status":200,"ts":1541967940796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"80"} 91 | {"artist":"Sidewalk Prophets","auth":"Logged In","firstName":"Molly","gender":"F","itemInSession":0,"lastName":"Taylor","length":260.62322,"level":"free","location":"St. Louis, MO-IL","method":"PUT","page":"NextSong","registration":1540992766796.0,"sessionId":464,"song":"You Love Me Anyway (Album)","status":200,"ts":1541970568796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.94 Safari\/537.36\"","userId":"35"} 92 | {"artist":"Rise Against","auth":"Logged In","firstName":"Molly","gender":"F","itemInSession":1,"lastName":"Taylor","length":221.17832,"level":"free","location":"St. Louis, MO-IL","method":"PUT","page":"NextSong","registration":1540992766796.0,"sessionId":464,"song":"Torches","status":200,"ts":1541970828796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.94 Safari\/537.36\"","userId":"35"} 93 | {"artist":"K'Naan","auth":"Logged In","firstName":"Molly","gender":"F","itemInSession":2,"lastName":"Taylor","length":220.49914,"level":"free","location":"St. Louis, MO-IL","method":"PUT","page":"NextSong","registration":1540992766796.0,"sessionId":464,"song":"Wavin' Flag","status":200,"ts":1541971049796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.94 Safari\/537.36\"","userId":"35"} 94 | {"artist":"Patrick Jumpen","auth":"Logged In","firstName":"Ryan","gender":"M","itemInSession":0,"lastName":"Smith","length":208.87465,"level":"free","location":"San Jose-Sunnyvale-Santa Clara, CA","method":"PUT","page":"NextSong","registration":1541016707796.0,"sessionId":480,"song":"Holiday","status":200,"ts":1541979540796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/36.0.1985.125 Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"26"} 95 | {"artist":"Alicia Keys","auth":"Logged In","firstName":"Ryan","gender":"M","itemInSession":1,"lastName":"Smith","length":216.47628,"level":"free","location":"San Jose-Sunnyvale-Santa Clara, CA","method":"PUT","page":"NextSong","registration":1541016707796.0,"sessionId":480,"song":"Empire State Of Mind (Part II) Broken Down","status":200,"ts":1541979748796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/36.0.1985.125 Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"26"} -------------------------------------------------------------------------------- /data/log_data/2018-11-10-events.json: -------------------------------------------------------------------------------- 1 | {"artist":"Hoobastank","auth":"Logged In","firstName":"Cierra","gender":"F","itemInSession":0,"lastName":"Finley","length":241.3971,"level":"free","location":"Richmond, VA","method":"PUT","page":"NextSong","registration":1541013292796.0,"sessionId":132,"song":"Say The Same","status":200,"ts":1541808927796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"96"} 2 | {"artist":"Mark Knopfler","auth":"Logged In","firstName":"Cierra","gender":"F","itemInSession":1,"lastName":"Finley","length":249.3122,"level":"free","location":"Richmond, VA","method":"PUT","page":"NextSong","registration":1541013292796.0,"sessionId":132,"song":"Why Aye Man","status":200,"ts":1541809168796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"96"} 3 | {"artist":"Mogwai","auth":"Logged In","firstName":"Cierra","gender":"F","itemInSession":2,"lastName":"Finley","length":341.28934,"level":"free","location":"Richmond, VA","method":"PUT","page":"NextSong","registration":1541013292796.0,"sessionId":132,"song":"We're No Here","status":200,"ts":1541809417796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"96"} 4 | {"artist":"The Casualties","auth":"Logged In","firstName":"Cierra","gender":"F","itemInSession":3,"lastName":"Finley","length":181.49832,"level":"free","location":"Richmond, VA","method":"PUT","page":"NextSong","registration":1541013292796.0,"sessionId":132,"song":"Punx Unite","status":200,"ts":1541809758796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"96"} 5 | {"artist":null,"auth":"Logged In","firstName":"Cecilia","gender":"F","itemInSession":0,"lastName":"Owens","length":null,"level":"free","location":"Atlanta-Sandy Springs-Roswell, GA","method":"GET","page":"Home","registration":1541032432796.0,"sessionId":424,"song":null,"status":200,"ts":1541813635796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko\/20100101 Firefox\/32.0","userId":"6"} 6 | {"artist":"The Living End","auth":"Logged In","firstName":"Ryan","gender":"M","itemInSession":0,"lastName":"Smith","length":188.62975,"level":"free","location":"San Jose-Sunnyvale-Santa Clara, CA","method":"PUT","page":"NextSong","registration":1541016707796.0,"sessionId":433,"song":"Roll On (Album Version)","status":200,"ts":1541822502796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/36.0.1985.125 Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"26"} 7 | {"artist":"Aloe Blacc","auth":"Logged In","firstName":"Rylan","gender":"M","itemInSession":0,"lastName":"George","length":244.1922,"level":"free","location":"Birmingham-Hoover, AL","method":"PUT","page":"NextSong","registration":1541020249796.0,"sessionId":402,"song":"I Need A Dollar","status":200,"ts":1541829709796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"16"} 8 | {"artist":"Faith No More","auth":"Logged In","firstName":"Rylan","gender":"M","itemInSession":1,"lastName":"George","length":326.50404,"level":"free","location":"Birmingham-Hoover, AL","method":"PUT","page":"NextSong","registration":1541020249796.0,"sessionId":402,"song":"Helpless","status":200,"ts":1541829953796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"16"} 9 | {"artist":"Chris Cornell","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":0,"lastName":"Kirby","length":353.69751,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Sunshower (Great Expectations Soundtrack)","status":200,"ts":1541835258796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 10 | {"artist":"Weezer","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":1,"lastName":"Kirby","length":203.93751,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"My Name Is Jonas","status":200,"ts":1541835611796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 11 | {"artist":"Stream of Passion feat. Ayreon","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":2,"lastName":"Kirby","length":257.56689,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Valley Of The Queens","status":200,"ts":1541835814796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 12 | {"artist":"Lupe Fiasco","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":3,"lastName":"Kirby","length":273.94567,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Shining Down [feat. Matthew Santos] (Amended Album Version)","status":200,"ts":1541836071796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 13 | {"artist":"Tom Petty","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":4,"lastName":"Kirby","length":263.23546,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Runnin' Down A Dream","status":200,"ts":1541836344796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 14 | {"artist":"The Killers","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":5,"lastName":"Kirby","length":220.89098,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"When You Were Young","status":200,"ts":1541836607796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 15 | {"artist":"Afghan Whigs","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":6,"lastName":"Kirby","length":179.40853,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"I'm Her Slave (Album)","status":200,"ts":1541836827796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 16 | {"artist":"CSS","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":7,"lastName":"Kirby","length":213.75955,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Let's Make Love And Listen To Death From Above [Dan Carey Mix] (remastered album version)","status":200,"ts":1541837006796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 17 | {"artist":"Mos Def \/ Talib Kweli","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":8,"lastName":"Kirby","length":141.37424,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"History","status":200,"ts":1541837219796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 18 | {"artist":"Ryan Leslie","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":9,"lastName":"Kirby","length":203.96363,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"How It Was Supposed To Be","status":200,"ts":1541837360796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 19 | {"artist":"Mark Lowry","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":10,"lastName":"Kirby","length":168.28036,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Get Together With The Lord (The Best Of Mark Lowry - Volume 2 Version)","status":200,"ts":1541837563796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 20 | {"artist":"Beirut","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":11,"lastName":"Kirby","length":230.19057,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Nantes","status":200,"ts":1541837731796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 21 | {"artist":"MODESELEKTOR FEAT. PUPPETMASTAZ","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":12,"lastName":"Kirby","length":52.79302,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"THE DARK SIDE OF THE FROG","status":200,"ts":1541837961796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 22 | {"artist":"Kid Cudi \/ Kanye West \/ Common","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":13,"lastName":"Kirby","length":237.76608,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Make Her Say","status":200,"ts":1541838013796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 23 | {"artist":"Julie Ruin","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":14,"lastName":"Kirby","length":142.47138,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Breakout A-Town","status":200,"ts":1541838250796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 24 | {"artist":"Sons And Daughters","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":15,"lastName":"Kirby","length":165.90322,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"The Bell","status":200,"ts":1541838392796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 25 | {"artist":"Children 18:3","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":16,"lastName":"Kirby","length":178.52036,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Mock The Music","status":200,"ts":1541838557796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 26 | {"artist":"Chris Cagle","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":17,"lastName":"Kirby","length":232.85506,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Miss Me Baby","status":200,"ts":1541838735796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 27 | {"artist":"John Waite","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":18,"lastName":"Kirby","length":269.76608,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Missing You","status":200,"ts":1541838967796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 28 | {"artist":"Basshunter","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":19,"lastName":"Kirby","length":223.32036,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Walk On Water","status":200,"ts":1541839236796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 29 | {"artist":"Jay-Z \/ Lil Wayne","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":20,"lastName":"Kirby","length":236.01587,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Hello Brooklyn 2.0","status":200,"ts":1541839459796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 30 | {"artist":"Snow Patrol","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":21,"lastName":"Kirby","length":273.6322,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"It's Beginning To Get To Me","status":200,"ts":1541839695796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 31 | {"artist":"Coldcut","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":22,"lastName":"Kirby","length":203.07546,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Autumn Leaves","status":200,"ts":1541839968796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 32 | {"artist":"Magic Dirt","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":23,"lastName":"Kirby","length":251.79383,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Plastic Loveless Letter","status":200,"ts":1541840171796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 33 | {"artist":"J. Karjalainen & Mustat Lasit","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":24,"lastName":"Kirby","length":336.74404,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Sinisten t\u00c3\u0083\u00c2\u00a4htien alla","status":200,"ts":1541840422796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 34 | {"artist":"OneRepublic","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":25,"lastName":"Kirby","length":224.67873,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Secrets","status":200,"ts":1541840758796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 35 | {"artist":"Nirvana","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":26,"lastName":"Kirby","length":219.08853,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Come As You Are","status":200,"ts":1541840982796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 36 | {"artist":null,"auth":"Logged In","firstName":"Theodore","gender":"M","itemInSession":0,"lastName":"Smith","length":null,"level":"free","location":"Houston-The Woodlands-Sugar Land, TX","method":"GET","page":"Home","registration":1540306145796.0,"sessionId":359,"song":null,"status":200,"ts":1541841030796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"52"} 37 | {"artist":"Joyce Cooling","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":27,"lastName":"Kirby","length":248.11057,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"It's Time I Go (Jazz)","status":200,"ts":1541841201796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 38 | {"artist":"Beastie Boys","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":28,"lastName":"Kirby","length":211.722,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Unite (2009 Digital Remaster)","status":200,"ts":1541841449796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 39 | {"artist":"Usher Featuring Lil' Jon & Ludacris","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":29,"lastName":"Kirby","length":250.38322,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Yeah!","status":200,"ts":1541841660796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 40 | {"artist":"Nelly \/ Paul Wall \/ Ali & Gipp","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":30,"lastName":"Kirby","length":272.50893,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Grillz","status":200,"ts":1541841910796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 41 | {"artist":"The Audition","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":31,"lastName":"Kirby","length":207.20281,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"The Running Man","status":200,"ts":1541842182796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 42 | {"artist":"Savage Garden","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":32,"lastName":"Kirby","length":277.26322,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Truly Madly Deeply","status":200,"ts":1541842389796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 43 | {"artist":"Adam Green","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":33,"lastName":"Kirby","length":141.00853,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Festival Song","status":200,"ts":1541842666796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 44 | {"artist":"Tom Petty","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":34,"lastName":"Kirby","length":204.82567,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Square One (Album Version)","status":200,"ts":1541842807796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 45 | {"artist":"Muse","auth":"Logged In","firstName":"Aleena","gender":"F","itemInSession":35,"lastName":"Kirby","length":209.34485,"level":"paid","location":"Waterloo-Cedar Falls, IA","method":"PUT","page":"NextSong","registration":1541022995796.0,"sessionId":350,"song":"Supermassive Black Hole (Album Version)","status":200,"ts":1541843011796,"userAgent":"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10.9; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"44"} 46 | {"artist":"The Gerbils","auth":"Logged In","firstName":"Jordan","gender":"F","itemInSession":0,"lastName":"Hicks","length":27.01016,"level":"free","location":"Salinas, CA","method":"PUT","page":"NextSong","registration":1540008898796.0,"sessionId":304,"song":"(iii)","status":200,"ts":1541843974796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.78.2 (KHTML, like Gecko) Version\/7.0.6 Safari\/537.78.2\"","userId":"37"} 47 | {"artist":"Robert Plant","auth":"Logged In","firstName":"Jordan","gender":"F","itemInSession":1,"lastName":"Hicks","length":265.66485,"level":"free","location":"Salinas, CA","method":"PUT","page":"NextSong","registration":1540008898796.0,"sessionId":304,"song":"Dancing In Heaven (2006 Remastered LP Version)","status":200,"ts":1541844001796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.78.2 (KHTML, like Gecko) Version\/7.0.6 Safari\/537.78.2\"","userId":"37"} 48 | {"artist":"Metallica","auth":"Logged In","firstName":"Jordan","gender":"F","itemInSession":2,"lastName":"Hicks","length":387.02975,"level":"free","location":"Salinas, CA","method":"PUT","page":"NextSong","registration":1540008898796.0,"sessionId":304,"song":"Welcome Home (Sanitarium)","status":200,"ts":1541844266796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.78.2 (KHTML, like Gecko) Version\/7.0.6 Safari\/537.78.2\"","userId":"37"} 49 | {"artist":"Infected Mushroom","auth":"Logged In","firstName":"Jordan","gender":"F","itemInSession":3,"lastName":"Hicks","length":506.51383,"level":"free","location":"Salinas, CA","method":"PUT","page":"NextSong","registration":1540008898796.0,"sessionId":304,"song":"Deeply Disturbed","status":200,"ts":1541844653796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.78.2 (KHTML, like Gecko) Version\/7.0.6 Safari\/537.78.2\"","userId":"37"} 50 | {"artist":"Eliza Doolittle","auth":"Logged In","firstName":"Jordan","gender":"F","itemInSession":4,"lastName":"Hicks","length":184.60689,"level":"free","location":"Salinas, CA","method":"PUT","page":"NextSong","registration":1540008898796.0,"sessionId":304,"song":"Rollerblades","status":200,"ts":1541845159796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.78.2 (KHTML, like Gecko) Version\/7.0.6 Safari\/537.78.2\"","userId":"37"} 51 | {"artist":"Alvin And The Chipmunks","auth":"Logged In","firstName":"Jordan","gender":"F","itemInSession":5,"lastName":"Hicks","length":162.63791,"level":"free","location":"Salinas, CA","method":"PUT","page":"NextSong","registration":1540008898796.0,"sessionId":304,"song":"Ain't No Party","status":200,"ts":1541845343796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.78.2 (KHTML, like Gecko) Version\/7.0.6 Safari\/537.78.2\"","userId":"37"} 52 | {"artist":"Chromeo","auth":"Logged In","firstName":"Jordan","gender":"F","itemInSession":6,"lastName":"Hicks","length":348.65587,"level":"free","location":"Salinas, CA","method":"PUT","page":"NextSong","registration":1540008898796.0,"sessionId":304,"song":"You're So Gangsta","status":200,"ts":1541845505796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.78.2 (KHTML, like Gecko) Version\/7.0.6 Safari\/537.78.2\"","userId":"37"} 53 | {"artist":"Keisha White","auth":"Logged In","firstName":"Kevin","gender":"M","itemInSession":0,"lastName":"Arellano","length":251.42812,"level":"free","location":"Harrisburg-Carlisle, PA","method":"PUT","page":"NextSong","registration":1540006905796.0,"sessionId":387,"song":"Brother","status":200,"ts":1541853599796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"66"} 54 | {"artist":"Juanes","auth":"Logged In","firstName":"Kevin","gender":"M","itemInSession":1,"lastName":"Arellano","length":247.37914,"level":"free","location":"Harrisburg-Carlisle, PA","method":"PUT","page":"NextSong","registration":1540006905796.0,"sessionId":387,"song":"Damelo","status":200,"ts":1541853850796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"66"} 55 | {"artist":null,"auth":"Logged In","firstName":"Walter","gender":"M","itemInSession":0,"lastName":"Frye","length":null,"level":"free","location":"San Francisco-Oakland-Hayward, CA","method":"GET","page":"Home","registration":1540919166796.0,"sessionId":180,"song":null,"status":200,"ts":1541854061796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"39"} 56 | {"artist":"Karnivool","auth":"Logged In","firstName":"Ryan","gender":"M","itemInSession":0,"lastName":"Smith","length":470.80444,"level":"free","location":"San Jose-Sunnyvale-Santa Clara, CA","method":"PUT","page":"NextSong","registration":1541016707796.0,"sessionId":445,"song":"Umbra","status":200,"ts":1541860418796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/36.0.1985.125 Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"26"} 57 | {"artist":"WES","auth":"Logged In","firstName":"Cecilia","gender":"F","itemInSession":0,"lastName":"Owens","length":221.57016,"level":"free","location":"Atlanta-Sandy Springs-Roswell, GA","method":"PUT","page":"NextSong","registration":1541032432796.0,"sessionId":444,"song":"Alane","status":200,"ts":1541861220796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko\/20100101 Firefox\/32.0","userId":"6"} 58 | {"artist":"Asia 2001","auth":"Logged In","firstName":"Cecilia","gender":"F","itemInSession":1,"lastName":"Owens","length":150.30812,"level":"free","location":"Atlanta-Sandy Springs-Roswell, GA","method":"PUT","page":"NextSong","registration":1541032432796.0,"sessionId":444,"song":"Epilogue","status":200,"ts":1541861441796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko\/20100101 Firefox\/32.0","userId":"6"} 59 | {"artist":"Spike Milligan","auth":"Logged In","firstName":"Samuel","gender":"M","itemInSession":0,"lastName":"Gonzalez","length":220.39465,"level":"free","location":"Houston-The Woodlands-Sugar Land, TX","method":"PUT","page":"NextSong","registration":1540492941796.0,"sessionId":384,"song":"Nothing At All","status":200,"ts":1541862959796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.77.4 (KHTML, like Gecko) Version\/7.0.5 Safari\/537.77.4\"","userId":"61"} 60 | {"artist":"Laura Izibor","auth":"Logged In","firstName":"Anabelle","gender":"F","itemInSession":0,"lastName":"Simpson","length":211.56526,"level":"free","location":"Philadelphia-Camden-Wilmington, PA-NJ-DE-MD","method":"PUT","page":"NextSong","registration":1541044398796.0,"sessionId":378,"song":"Carousel (PSILY Album Version)","status":200,"ts":1541867247796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"69"} 61 | {"artist":null,"auth":"Logged In","firstName":"Lily","gender":"F","itemInSession":0,"lastName":"Burns","length":null,"level":"free","location":"New York-Newark-Jersey City, NY-NJ-PA","method":"GET","page":"Home","registration":1540621059796.0,"sessionId":426,"song":null,"status":200,"ts":1541870196796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.125 Safari\/537.36\"","userId":"32"} 62 | {"artist":"Ryan Adams","auth":"Logged In","firstName":"Braden","gender":"M","itemInSession":0,"lastName":"Parker","length":248.5024,"level":"free","location":"Youngstown-Warren-Boardman, OH-PA","method":"PUT","page":"NextSong","registration":1540999292796.0,"sessionId":246,"song":"Wonderwall","status":200,"ts":1541871116796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"74"} 63 | {"artist":null,"auth":"Logged In","firstName":"Adelyn","gender":"F","itemInSession":0,"lastName":"Jordan","length":null,"level":"free","location":"Chicago-Naperville-Elgin, IL-IN-WI","method":"GET","page":"Home","registration":1540130971796.0,"sessionId":391,"song":null,"status":200,"ts":1541871867796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"7"} 64 | {"artist":"Method Man","auth":"Logged In","firstName":"Adelyn","gender":"F","itemInSession":1,"lastName":"Jordan","length":204.64281,"level":"free","location":"Chicago-Naperville-Elgin, IL-IN-WI","method":"PUT","page":"NextSong","registration":1540130971796.0,"sessionId":391,"song":"The Motto","status":200,"ts":1541871869796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"7"} 65 | {"artist":"The Stanley Brothers","auth":"Logged In","firstName":"Adelyn","gender":"F","itemInSession":2,"lastName":"Jordan","length":179.69587,"level":"free","location":"Chicago-Naperville-Elgin, IL-IN-WI","method":"PUT","page":"NextSong","registration":1540130971796.0,"sessionId":391,"song":"I'm A Man Of Constant Sorrow","status":200,"ts":1541872073796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"7"} 66 | {"artist":"Dexter Freebish","auth":"Logged In","firstName":"Adelyn","gender":"F","itemInSession":3,"lastName":"Jordan","length":210.54649,"level":"free","location":"Chicago-Naperville-Elgin, IL-IN-WI","method":"PUT","page":"NextSong","registration":1540130971796.0,"sessionId":391,"song":"Deeper","status":200,"ts":1541872252796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"7"} 67 | {"artist":"Jamiroquai","auth":"Logged In","firstName":"Jacob","gender":"M","itemInSession":0,"lastName":"Rogers","length":362.05669,"level":"free","location":"San Diego-Carlsbad, CA","method":"PUT","page":"NextSong","registration":1540976199796.0,"sessionId":432,"song":"Talullah","status":200,"ts":1541873727796,"userAgent":"\"Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit\/537.75.14 (KHTML, like Gecko) Version\/7.0.3 Safari\/537.75.14\"","userId":"18"} 68 | {"artist":"Michael Cera & Ellen Page","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":0,"lastName":"Jones","length":116.71465,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Anyone Else But You","status":200,"ts":1541876932796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 69 | {"artist":"The Cat Empire","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":1,"lastName":"Jones","length":218.22649,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"How To Explain","status":200,"ts":1541877048796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 70 | {"artist":"Bryn Terfel \/ Berliner Philharmoniker \/ Claudio Abbado","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":2,"lastName":"Jones","length":967.36608,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Wotan's Farewell & Magic Fire Music","status":200,"ts":1541877266796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 71 | {"artist":"The Fugees","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":3,"lastName":"Jones","length":281.20771,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Ready Or Not","status":200,"ts":1541878233796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 72 | {"artist":"Hardline","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":4,"lastName":"Jones","length":234.73587,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Everything","status":200,"ts":1541878514796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 73 | {"artist":"The Funky Lowlives","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":5,"lastName":"Jones","length":280.34567,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Sail Into the Sun","status":200,"ts":1541878748796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 74 | {"artist":"DL Incognito","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":6,"lastName":"Jones","length":221.07383,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Proof","status":200,"ts":1541879028796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 75 | {"artist":null,"auth":"Logged In","firstName":"Theodore","gender":"M","itemInSession":0,"lastName":"Smith","length":null,"level":"free","location":"Houston-The Woodlands-Sugar Land, TX","method":"GET","page":"Home","registration":1540306145796.0,"sessionId":447,"song":null,"status":200,"ts":1541879108796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"52"} 76 | {"artist":"Justice","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":7,"lastName":"Jones","length":243.40853,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"TTHHEE PPAARRTTYY","status":200,"ts":1541879249796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 77 | {"artist":"Earth_ Wind & Fire","auth":"Logged In","firstName":"Theodore","gender":"M","itemInSession":1,"lastName":"Smith","length":178.20689,"level":"free","location":"Houston-The Woodlands-Sugar Land, TX","method":"PUT","page":"NextSong","registration":1540306145796.0,"sessionId":447,"song":"Night Dreamin'","status":200,"ts":1541879270796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"52"} 78 | {"artist":"Strawbs","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":8,"lastName":"Jones","length":255.81669,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Sheep","status":200,"ts":1541879492796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 79 | {"artist":"Angus & Julia Stone","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":9,"lastName":"Jones","length":172.85179,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Wasted","status":200,"ts":1541879747796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 80 | {"artist":"Sara Bareilles","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":10,"lastName":"Jones","length":260.8322,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Love Song","status":200,"ts":1541879919796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 81 | {"artist":"Bruna Caram","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":11,"lastName":"Jones","length":198.63465,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Meus Sonhos","status":200,"ts":1541880179796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 82 | {"artist":"Nando Reis","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":12,"lastName":"Jones","length":239.82975,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"O Segundo Sol","status":200,"ts":1541880377796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 83 | {"artist":"The Black Keys","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":13,"lastName":"Jones","length":189.28281,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Same Old Thing","status":200,"ts":1541880616796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 84 | {"artist":"Kreator","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":14,"lastName":"Jones","length":294.53016,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Riot Of Violence","status":200,"ts":1541880805796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 85 | {"artist":"Audioslave","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":15,"lastName":"Jones","length":277.83791,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Show Me How To Live","status":200,"ts":1541881099796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 86 | {"artist":"Red Hot Chili Peppers","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":16,"lastName":"Jones","length":269.34812,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Parallel Universe (Album Version)","status":200,"ts":1541881376796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 87 | {"artist":"Manu Chao","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":17,"lastName":"Jones","length":288.15628,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Me Quedo Contigo [Si Me Das A Elegir]","status":200,"ts":1541881645796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 88 | {"artist":"Barry Tuckwell\/Academy of St Martin-in-the-Fields\/Sir Neville Marriner","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":18,"lastName":"Jones","length":277.15873,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"Horn Concerto No. 4 in E flat K495: II. Romance (Andante cantabile)","status":200,"ts":1541881933796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 89 | {"artist":"Ron Carter","auth":"Logged In","firstName":"Matthew","gender":"M","itemInSession":19,"lastName":"Jones","length":497.13587,"level":"paid","location":"Janesville-Beloit, WI","method":"PUT","page":"NextSong","registration":1541062818796.0,"sessionId":439,"song":"I CAN'T GET STARTED","status":200,"ts":1541882210796,"userAgent":"\"Mozilla\/5.0 (Windows NT 5.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.143 Safari\/537.36\"","userId":"36"} 90 | {"artist":null,"auth":"Logged In","firstName":"Theodore","gender":"M","itemInSession":0,"lastName":"Harris","length":null,"level":"free","location":"Red Bluff, CA","method":"GET","page":"Home","registration":1541097374796.0,"sessionId":440,"song":null,"status":200,"ts":1541884206796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"14"} 91 | {"artist":null,"auth":"Logged In","firstName":"Theodore","gender":"M","itemInSession":1,"lastName":"Harris","length":null,"level":"free","location":"Red Bluff, CA","method":"GET","page":"Home","registration":1541097374796.0,"sessionId":440,"song":null,"status":200,"ts":1541884572796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"14"} 92 | {"artist":"Lifehouse","auth":"Logged In","firstName":"Theodore","gender":"M","itemInSession":2,"lastName":"Harris","length":195.47383,"level":"free","location":"Red Bluff, CA","method":"PUT","page":"NextSong","registration":1541097374796.0,"sessionId":440,"song":"You And Me (Wedding Version)","status":200,"ts":1541884618796,"userAgent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko\/20100101 Firefox\/31.0","userId":"14"} 93 | {"artist":"Yann Tiersen","auth":"Logged In","firstName":"Kaylee","gender":"F","itemInSession":0,"lastName":"Summers","length":158.71955,"level":"free","location":"Phoenix-Mesa-Scottsdale, AZ","method":"PUT","page":"NextSong","registration":1540344794796.0,"sessionId":333,"song":"La Valse D'Am\u00c3\u0083\u00c2\u00a9lie (Version Piano)","status":200,"ts":1541885952796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.153 Safari\/537.36\"","userId":"8"} 94 | {"artist":"ISRAEL & NEW BREED","auth":"Logged In","firstName":"Kaylee","gender":"F","itemInSession":1,"lastName":"Summers","length":176.48281,"level":"free","location":"Phoenix-Mesa-Scottsdale, AZ","method":"PUT","page":"NextSong","registration":1540344794796.0,"sessionId":333,"song":"Awesome Medley","status":200,"ts":1541886110796,"userAgent":"\"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.153 Safari\/537.36\"","userId":"8"} 95 | {"artist":null,"auth":"Logged In","firstName":"Molly","gender":"F","itemInSession":0,"lastName":"Taylor","length":null,"level":"free","location":"St. Louis, MO-IL","method":"GET","page":"Home","registration":1540992766796.0,"sessionId":396,"song":null,"status":200,"ts":1541886726796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.94 Safari\/537.36\"","userId":"35"} 96 | {"artist":"Stellar Kart","auth":"Logged In","firstName":"Molly","gender":"F","itemInSession":1,"lastName":"Taylor","length":186.17424,"level":"free","location":"St. Louis, MO-IL","method":"PUT","page":"NextSong","registration":1540992766796.0,"sessionId":396,"song":"Jesus Loves You (Album Version)","status":200,"ts":1541886750796,"userAgent":"\"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.94 Safari\/537.36\"","userId":"35"} --------------------------------------------------------------------------------