ppettit / peakaboo Goto Github PK
View Code? Open in Web Editor NEWLecture Capture Agent Real Time Dashboard
License: MIT License
Lecture Capture Agent Real Time Dashboard
License: MIT License
I need to look into this further, but logging in to meteor with resume tokens from the galicaster user seems to not work (either in galicaster ddp plugin or the browser) - the server never responds to the login request.
weirdly other users seem to be ok.
i assume it is something to do with lots of devices logging in with one username, though not entirely sure.
In order to make automating deployment easier we need to remove the configuration step of the MongoDB container.
Should at least give an overview, and say how to run in development env, point to docker docs (/.docker/README.md
)
@pmgration said:
"It would be useful to be able to restart galicaster (or even reboot machines) on a selection of, or all, machines at once via the UI."
list of all recordings on all boxes, with option to reingest
might need to search/filter/sort somehow?
A Galicaster can appear 'online', because images are being received from it (screenshot of galicaster interface, camera view, presentation view) which updates the heartbeat and does confirm that galicaster is on and running but it doesn't mean that the DDP connection is alive. If for example the password in mongodb for the galicaster user doesn't match the one used for nginx (for image posting from galicaster) and the galicaster DDP configuration credentials, then the Galicaster will appear online but interaction with it is limited/misleading (VU doesn't update, starting recording remotely from within peakaboo will appear as if it is starting a recording but won't be). It would be good to add information to the capture agent info table to display it's DDP connection status, and perhaps add some indicator on the room list view.
Should we set a default value for the caTimeout
configuration option if it doesn't exist in settings? Currently if it's not configured then capture agents never show as offline.
It'd be useful for Peakaboo to display loaded plugins, plugin version information and potentially other useful information from Galicaster - this is prompting me to think about Galicaster plugin architecture in general..perhaps plugins should inherit from a skeleton abstract/base class (there are no "interfaces" as such in Python) with plugin version info, dependencies and new signals to register etc?
Any thoughts on this?
We should try to refactor the app following the new style guide
@pmgration said:
"The ability to configure options peakaboo / galicaster options through the peakaboo UI would be good."
it would be good to get rid of (or significantly trim!) the settings file. also having to restart to change settings is bad.
need samples of:
/config/settings.json
@androidwiltron said:
"a room may need to be removed from peakaboo under certain circumstances
a button with an 'I can't let you do that dave' prompt would be good for each room.
admin only
i've got this far (in the console)
`Rooms.remove({_id: 'HAL'})`"
I said:
"good idea.
as it stands, nothing that can't be immediately regenerated is stored in the db anyway, so deleting is not a terrible thing (indeed, if you try deleting the room with the command you mention while the capture agent is still running you'll notice it instantly reappear as the capture agent listens for it's own deletion and immediately re-instates itself!)
we are considering adding the ability to add custom room metadata that would be stored on the server rather than on the capture agent (like our current netreg field). we would probably add that stuff in a new collection though to preserve the above behaviour."
@androidwiltron said:
"Commit be720034 in branch uom will do a pull request with other things soon"
Hi,
I'm trying to test peekaboo and for that checked out the project and switched to develop.
Bringing up the docker environment, and trying to log-in to the web application with the credentials ([email protected]/admin) fails with no message.
Executing a shell in the mongodb container and checking the DB contents I can see that the sample users have been created properly:
peakaboo:PRIMARY> db.users.find({}) { "_id" : "Tj44QMWhxbWxtJwnR", "createdAt" : ISODate("2016-05-26T08:29:56.527Z"), "services" : { "password" : { "bcrypt" : "$2a$10$ifJika9Xhavw6mhj20YVCuNSFfqU4UX9n3HtcfmcTx8B/a6d5VEU." } }, "emails" : [ { "address" : "[email protected]", "verified" : true } ], "profile" : { "name" : "Admin" }, "roles" : [ "admin" ] } { "_id" : "HkyrwqYswXE9kMq8b", "createdAt" : ISODate("2016-05-26T08:29:56.582Z"), "services" : { "password" : { "bcrypt" : "$2a$10$T2jxyDnzO.o90rxJ1I/5WeS2sZADNpFCD/8Puykp/7uLlt4UHQiwm" } }, "emails" : [ { "address" : "[email protected]", "verified" : true } ], "profile" : { "name" : "View" }, "roles" : [ "view-rooms" ] } { "_id" : "QHJGMtMoAHnWxwvvb", "createdAt" : ISODate("2016-05-26T08:29:56.639Z"), "services" : { "password" : { "bcrypt" : "$2a$10$pKgP7QcKibsMmUUjFWhoaODe0Q.xd4kaorqgs6nTEvHwN9eWelQPa" } }, "emails" : [ { "address" : "[email protected]", "verified" : true } ], "profile" : { "name" : "Control" }, "roles" : [ "control-rooms" ] } { "_id" : "FPaepJLxbwNJaoTnY", "createdAt" : ISODate("2016-05-26T08:29:56.696Z"), "services" : { "password" : { "bcrypt" : "$2a$10$awqQx1MSb485oCDZ35ttweDi8YBj0il1aBuf3kPLjiv6kOS/cHAsm" } }, "emails" : [ { "address" : "[email protected]", "verified" : true } ], "profile" : { "name" : "Galicaster" }, "roles" : [ "galicaster" ] }
Should this work or did I miss something?
Thanks,
Bruno
The app has a permanent footer with git version information, however when deployed in docker this information isn't available - probably because the .git directory isn't available to peakaboo in the docker environment so there's nothing for meteor-git-rev (git-rev) to find out about. It would be good to get this working for production environments where docker is used.
It may be useful to access capture agent logs from the Peakaboo dashboard
We have live, test and development opencast environments, it would be good to be able to see from within peakaboo which environment a capture agent is pushing recordings to
Currently defaults are added in server/app.coffee when no existing accounts exist, it'd be useful to be able to override this list (perhaps just JSON with list of users as an extra environment variable)
Some stuff is specific to galicaster (such as in the device protocol) but should be made more generic so that it makes sense for other types of capture agent.
create/manage users from the web interface.
/users
already exists to manage roles, but you can not create users there.
Use something like Guacamole?
@pmgration said:
"May be desirable so that galicaster starts recording when the software starts but this doesn't seem to happen.."
not completely sure what this means ๐
@pmgration said:
"I noticed that when viewing the room list page and resizing the window small enough to trigger it to react to show a single room per row, the top of the panel for the room goes behind the navbar. I think this has come about because the navbar now increases in height at this window size because the new room filters push onto another line.."
better for mobiles with lots of agents?
We may be able to emulate the ssh terminal on the room page to allow support to run commands but ensure that everything is logged and by whom.
see also #8 as guacamole can probably do this
How can an arbitrary capture agent talk to peakaboo?
add a generic GC 2.0 plugin to talk to peakaboo
cannot connect to galicaster without runtime errors or login correctly
@androidwiltron said:
"navbar filter is currently none(all), low audio, offline, recording, paused
add 'Online' filter button, hiding the 'offline' rooms
(maybe approach with a conditional: if (room parameters) offline = False ??)
my early try is below, kind of works with no count:
client/navbar/navbar.html
line 54
<label class="btn peakaboo-filter btn-success {{#unless getPublishedCount 'online'}}peakaboo-filter-zero{{/unless}}" title="Show Online">
<input type="checkbox" name="online"><i class="glyphicon glyphicon-ok"></i> {{getPublishedCount 'online'}}
</label>
"
I suspect this is a chrome thing however, the audiostream from the CA will not load fully in chrome.
it will partially buffer then stop.
tried enabling auto-play in chrome with no change
firefox and safari seem OK
The documentation for peakaboo needs a little work. could cause confusion on how to get started and set up for a new user
Readme.md at the root of the project:
an introduction to the project
how to run in dev
settings.json
how to run in docker for production
Who did what?
record who did stuff and when....
such as audio level changes, restarts etc..
display on a timeline on each room page?
Hi Paul
I'm testing peekaboo for my opencast platform
I see that you create a test user on mongo
Can I use basic authentication with admin/admin?
Should I configure mandatory cas or ldap?
I just upgraded to Chrome 51 and there seems to be some issues with peakaboo with this version (and possibly future versions). I'm not presented with the login page but instead get a message about not being cool enough (obviously not true!). I believe @ppettit has previously experienced this too.
Error message in browser console shows "Exception in callback of async function: Error: Handler with name 'u' already exists."
Looking into this it seems this is somehow related to iron router and an update may fix it. I've been working on it, when time permits - so far I have managed to get it working but have upgraded all packages and meteor. However I then needed to make a few minor changes for a other things that weren't working too (e.g. admin access to 'users' route).
We should write tests and set up automated testing.
This might be easier after a move to Meteor 1.3
list of recordings available on box, with option to reingest
This is about how when you first launch peakaboo with meteor, you cannot log in as the login method is not defined or it defaults to i can see loginWithLdap
(im not sure)loginMethods
returns an empty list
it would be great to have loginWithPassword
to be default for first time users to get them up and running
@androidwiltron said:
"if a user in peakaboo example 'galicaster' has many valid tokens then more are requested simultaneously the database becomes unresponsive and tokens cannot be requested, rooms remain 'offline' and users cannot visit the page getting timeout errors instead.
a suggestion was to use a UID per room to authenticate against peakaboo thus having a small array of tokens for each user making this step more responsive"
@androidwiltron said:
"get scheduled for each capture agent from mhorn ICal endpoint, parse and display the list of upcoming events for a defined time threshold.
useful to visually determine if CA is recording when it should be"
I replied:
"sounds good, we are not using scheduling though so would probably not have the time to work on it ourselves (but would accept merge requests ๐).
there is already a tab for controls
on the room page as we have a partially implemented repository
tab so maybe adding a schedule
tab would be cool?"
The local package ppettit:accounts-ldap
requires an async package to call Async.runSync
, it looks as though peerlibrary:async
was added specifically to the package list specifically for this local package but for some reason I'm seeing this error:
I20181123-11:18:49.586(0)? Exception while invoking method 'login' ReferenceError: Async is not defined
I20181123-11:18:49.586(0)? at DDPCommon.MethodInvocation.<anonymous> (packages/ppettit_accounts-ldap.js:45:16)
Installing the meteorhacks:async
package seemed to work (meteor add meteorhacks:async
).
Also I had to change the authentication line to ad.authenticate(
${loginRequest.username}@${domain}, loginRequest.ldap_password, done);
where domain
is specific to our institution and hard-coded in our deployment.
It'd be easy to have users enter an email address as their username (loginRequest.username
) but this will be registered as their username at first login and I think the intention is that usernames and email addresses are distinct in Meteor, at least there are separate fields for them in Meteor user accounts...
I rewrote the accounts-ldap package for a different Meteor project we had a while ago, the rewrite didn't depend on external Async
packages and was ES2015 - it needs some changes to make it not specific to our institution but it might be a usable as a replacement to the existing local accounts-ldap package at some stage.
ive found with a completely fresh clone of peakaboo and meteor that running meteor
will result in an syntax error right now. and then missing node modules
for the syntax error it seems like the package.json
file it does not like the syntax in there.
SyntaxError: Unexpected token } in JSON at position 696
as for the missing node modules, this can be fixed with meteor npm install --save
to make this not an ongoing thing, should we be commiting the node_modules folder? i'm not sure
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.