16:08:15 #startmeeting Cockpit (2014-12-08) 16:08:15 Meeting started Mon Dec 8 16:08:15 2014 UTC. The chair is sgallagh. Information about MeetBot at http://wiki.debian.org/MeetBot. 16:08:15 Useful Commands: #action #agreed #halp #info #idea #link #topic. 16:08:28 .hello mvo 16:08:29 mvollmer: mvo 'Marius Vollmer' 16:08:31 #chair mvollmer stefw andreasn sgallagh 16:08:31 Current chairs: andreasn mvollmer sgallagh stefw 16:08:34 .hello stefw 16:08:35 stefw: stefw 'Stef Walter' 16:08:38 .hello sgallagh 16:08:40 sgallagh, thanks! 16:08:41 sgallagh: sgallagh 'Stephen Gallagher' 16:09:08 #topic agenda 16:09:21 ok, what's on the agenda? 16:09:29 * metric channel 16:09:39 If we get a moment, I'd like to talk about the (currently nonfunctional) Coverity scans. 16:09:47 sure 16:09:49 * Template HTML rendering 16:09:52 * coverity 16:10:13 * dashboard discovery? 16:10:55 * stefw nods 16:11:26 * interframe caching/sharing 16:11:48 .hello dmossor 16:11:50 danofsatx-work: dmossor 'Dan Mossor' 16:12:51 danofsatx-work, welcome! 16:13:01 thank ye, thank ye ;) 16:13:14 :) 16:13:17 o/ 16:13:21 ok, first topic? 16:13:23 Figured I lurk here often enough I may as well speak up 16:13:58 #topic metric channels 16:14:07 stefw, do you want? 16:14:34 sure 16:14:41 ok, great. 16:14:56 so we're working on a new protocol channel payload for transferring metric samples ... to populate graphs and such. 16:15:19 it's important that this is done the right way, because of performance 16:15:44 so i've sketched out a basic channel payload and structure and handed it over to mvollmer who really wants to get this done soon. 16:15:55 in addition this work is about reading data from PCP where we can 16:16:05 such as logged CPU/memory/disk metrics etc. 16:16:25 not everything can be consumed from PCP 16:16:30 http://www.pcp.io/ 16:16:32 (not yet) 16:16:40 because it doesn't yet have all the right metrics available to us 16:16:58 so we'll continue to have our own internal gathering for certain metrics, such as per container CPU/memory/disk usage 16:17:25 currently we've been gathering these resource metrics in cockpitd 16:17:50 and unbundling this from cockpitd brings us one step closer to running cleanly on Atomic or RHEL 6 where cockpitd does not compile. 16:17:59 (due to dependencies) 16:18:08 i think that's about it, mvollmer do you have any more about this? 16:18:29 the main new feature will be meaningful historical data 16:18:43 where we configure pcp to log interesting stuff always 16:18:56 so we can display data from the last week or so 16:19:08 this means the graphs will be scrollable and zoomable etc 16:19:13 so big changes in the UI 16:19:45 i am reading up on the pcp api and have stefw's code running here. 16:20:15 oh cool ... it runs? 16:20:18 so PoC for kernel.all.cpu.user works 16:20:21 weee 16:20:37 yes, great work if you only have compiled it but never run it so far. 16:20:39 :-) 16:21:00 thanks 16:21:14 I made some changes here https://github.com/mvollmer/cockpit/commits/metrics-channel 16:21:23 so these metric channels are a blocker for doing the graphs right ... which is a blocker for putting stuff into components ... our big goal 16:22:34 and it's also a great feature by itself. :-) 16:22:40 indeed 16:22:58 i am surprised by how well people seem to like the silly 5 minute graphs that we have. :-) 16:23:12 mvollmer: They demo *really* well 16:23:34 sgallagh, imagine zooming out and scrolling back to last week! 16:23:53 with important events marked on the graphs 16:23:53 Whoa! 16:24:01 :-D 16:24:06 so, anyway that's the goal. 16:24:21 cool 16:24:40 kind of a big thing, so it will take a bit unfortunately. 16:25:17 ok, next topic? 16:25:20 yup 16:25:40 #topic template html rendering 16:26:01 i've been looking at what kind of HTML client side templating to use 16:26:16 since we're componentizing everything, we have some liberty to experiment with differcent things in different components 16:26:32 in fact, if certain components are very complex and have different needs they can use different templates 16:26:39 * stefw pulls up an example of client side templates 16:27:13 https://github.com/janl/mustache.js/#include-templates 16:27:22 you can see the {{ value }} syntax there for example 16:27:25 that's what this is about 16:27:42 angularjs contains templating and data-binding for updating the rendered template when data changes 16:27:53 but it is very complex and hard to imagine using it for simple things 16:28:00 so i've been looking at mustache.js 16:28:12 mustache is a standard template form usable in all sorts of different languages 16:28:25 i have the basic docker containers listing rendering using mustache 16:28:44 and i have some code to do incremental html updates, rather than blowing away the entire screen whenever any little thing changes 16:29:12 this work is related to the dashboard work, because i would like to render the 'Servers' and 'Events' section using templates 16:29:22 however i am first experimenting with this in a component before bringing it into the shell 16:29:34 I like this a lot 16:30:37 I guess the browser also does clever incremental updates somehow, blowing away a whole list and constructing it again doesn't seem to be terrible, performance wise. 16:30:51 it does cause flicker though 16:30:53 and doesn't flicker or stuff like that. 16:30:57 does it? 16:31:00 hmm... 16:31:03 i guess it depends 16:31:12 it does break state on elements, selection, etc. 16:31:27 if the user has half clicked a button, and that button gets replaced ... 16:31:38 anyway, my point is, it's not perfect and there might be flicker and other artifacts, like menus closing when they get recreated randomly 16:31:49 but anyway, incremental updates are just 50 lines of code 16:31:51 nothing fancy 16:31:56 yes, great. 16:32:13 i guess incremental rendering of templates is much harder 16:32:19 and by doing the actual incremental diff near on the outputted DOM 16:32:24 we can avoid diffing mountains of stuff 16:32:27 or impossible if the output is a string anyway 16:32:29 we almost always have *way* more in our model 16:32:43 the output of mustache.js is indeed a string 16:32:53 but i'm pretty happy with diffing the parsed DOM 16:33:02 because it's way faster than diffing all the internal JSON and objects etc... 16:33:09 lots less data 16:33:11 so, this sounds quite right for us. 16:33:16 i think so 16:33:24 i'm not against someone using angularjs in a cockpit component 16:33:29 and i would like to see what obstacles are encountered 16:33:36 but it is very heavy weight ... far more than we need 16:34:05 yes, I'm afarid we would have even more cargo-cult code than now. 16:34:09 indeed 16:34:20 my main concern would be the barrier to entry 16:34:36 in order for someone to contribute to cockpit they would need to learn angularjs 16:35:24 i have the feeling that angular makes it quite hard to find the end of the string to start pulling on 16:35:32 right 16:35:50 everybody knows how to follow some function calls down the stack 16:36:51 alright, well i'll keep everyone posted on this 16:36:56 cool 16:37:03 #next-topic 16:37:07 :) 16:37:23 #topic Coverity 16:37:29 /me waves 16:38:21 OK, so I had to stop my regular Coverity scans a while back, because changes to the upstream make-srpm tool resulted in being unable to create SRPMs that could be built by the coverity tool 16:38:33 * stefw thought he fixed that 16:38:41 I just tried again this morning 16:39:13 http://koji.fedoraproject.org/koji/taskinfo?taskID=8322634 16:39:39 Ah, actually it looks like this may be a different problem than before. 16:39:50 yes 16:40:00 this has to do with koji not allowing network access 16:40:10 (As it shouldn't) 16:40:21 you should run autogen.sh before you run make-rpms 16:40:22 We need to have the Node modules you need packaged and BuildRequires: 16:40:31 then you'll download the necessary stuff and make-srpm will include it 16:40:34 sgallagh, no 16:40:41 these are not BuildRequires dependencies 16:40:45 these are development dependencies 16:40:50 our tarballs do not require these 16:40:52 ah 16:40:53 to build 16:40:54 ok 16:41:07 we do not expect packagers or distributors of cockpit to have to mess with node.js 16:41:25 ok 16:41:33 if you run autogen.sh before you run make-srpm you'll get all the necessary node.js modules in the srpm 16:41:40 Let's table this discussion for the moment. I thought we were still in the same shape as before. 16:41:50 I need to spend a little more time here. 16:41:57 i think i fixed this issue, and then it got broken again 16:42:02 Hopefully I'll have those scans back up today. 16:42:10 mvollmer, maybe make-srpm should do the 'npm install'? 16:42:20 so that we avoid this situation? 16:42:30 should we have make-srpm fail when the modules are missing? 16:42:42 or that way around. 16:42:55 yea, it shouldn't run autogen.sh 16:42:56 i guess we could check for the presence of the directory 16:43:04 and just run 'npm install' if it doesn't exist 16:43:16 make sure we don't slow down CI just because of this use case 16:43:16 yes 16:43:43 No, don't bother. 16:43:51 My test this morning was flawed. 16:44:01 In my automated env, it will be running autogen.sh 16:44:03 would it make sense to make a branch in gt that is equivalent to a tarball, just for coverity? 16:44:07 (since it's always doing a clean checkout) 16:44:16 mvollmer, how do you do that? 16:44:34 if you want that you just run 'make dist' 16:44:54 Yeah, there's no need to have 'make distdir' checked in 16:44:55 so coverity can do all these things itself, right? 16:45:21 Right, I was operating under a bad assumption. I thought we were still in the situation where 'make-srpm' only worked as a feeder into 'make-rpms' 16:45:27 ok, #undoidea 16:45:28 But it seems that stefw fixed this ahead of time 16:45:45 yes, we sed the cockpit.spec with the right info 16:46:04 so that the SRPM builds independent of any cockpit scripts 16:47:01 next topic? 16:47:40 #topic Dashboard Discovery 16:47:58 The above work on templates, and the JSON cache work (later agenda) item is my current status on the Dashboard discovery 16:48:15 these are dependencies, and things we need to figure out before completing the dashboard 16:48:20 one update though 16:48:39 i think that the 'Events' or 'Alerts' table should come from the same plugin information sources as the machines and objects for the dashboard 16:48:50 so these various sources can provide all that information 16:48:56 yes, makes sense 16:48:57 but that's theoretical ... and i haven't implemented it yet 16:49:19 what about the graphs? 16:49:31 they could also be populated from the discovered objects 16:49:42 right, certain machines will get put into the graphs 16:50:08 but i don't think the dashboard plugins will have too much knowledge of that 16:50:23 i do imagine that the plugins will include a list of cgroups that are related to the object 16:50:27 but not much more than that 16:50:33 sgallagh, by the way this is all relevant to rolekit 16:50:38 rolekit would be one such source of information 16:50:55 /me reads scrollback 16:51:02 (Attending several simultaneous meetings) 16:51:12 sgallagh, https://github.com/cockpit-project/cockpit/pull/1548/files#diff-d29b701b0d40938876d4a0f7ea6d037dR1 16:51:47 So this is plugin stuff, then? 16:51:57 yes, there are different kinds of plugins 16:52:06 we have component plugins that present a full page UI 16:52:22 and these are discovery plugins for finding machines and objects and information about them 16:52:42 rolekit will likely have a discovery plugin 16:52:46 ok 16:52:50 and a number of component plugins for its various roles 16:52:55 /me nods 16:52:58 as well as a component plugin for adding a new role 16:53:25 Sorry, I can't parse that last part. 16:53:52 well, the way i see it for each role that is deployed, we'll be able to show details of that role's state 16:53:52 (/me has just read the whole mustache reference manual I think. Very nice and simple stuff.) 16:54:17 sgallagh, and likely there will be one or more user interfaces for adding a new role(s) 16:54:32 ok 16:55:47 #topic Interframe Caching/Sharing 16:56:11 As part of the dashboard work, i've also been working on a way to use window.sessionStorage to share cached information, and track updates to it. 16:56:43 for example if we have the dashboard looking up a list of containers, then we don't want other things performing the same task, and doing 2 or 3 times as much work every time docker tells us that a change happened. 16:57:08 this caching happens at a low level 16:57:18 and is used internally to the plugin code 16:57:36 callers of the various docker plugins have no idea that information is being shared between instances of the plugins in the dashboard, and the component user interface 16:57:50 but the docker code uses this capability to be efficient 16:58:02 early pull request here: https://github.com/cockpit-project/cockpit/pull/1563 16:58:33 from the get go, this allows us to share the list of cockpit packages between components, not loading it over and over again 16:58:46 but very likely server information like hostname etc... would be similarly cached 16:59:16 the pretty hostname? 16:59:16 the JsonCache code automatically arbitrates between instances of its caller, and one of them gets to own and perform updates to the cache 16:59:18 mvollmer, yes 16:59:23 right 16:59:41 if the caller instance that is updating the cache goes way, it clears the cache, and another caller takes over 17:00:09 the actual data cached is JSON 17:01:28 alright, next topic? 17:01:42 or are we done with the agenda? 17:02:02 how do we move to open floor? 17:02:08 #topic Open Floor 17:02:14 andreasn, are you around, anything to add? 17:02:22 FYI: http://www.phoronix.com/scan.php?page=article&item=fedora_21_cockpit 17:03:10 wow...more dev-y-ish than I expected. I understood about half of what was presented today..... 17:03:15 again, all the 'Ooops' in the corner means stuff went wrong 17:03:30 danofsatx-work, sorry bout that 17:03:41 we're in heavy development mode right now 17:03:46 but happy to discuss other topics too 17:04:32 no probs ;) 17:04:41 It's a learning experience for me 17:06:37 all done? 17:06:46 i'd say so. 17:07:23 #endmeeting