-
Notifications
You must be signed in to change notification settings - Fork 0
/
rss.xml
1004 lines (722 loc) · 58.8 KB
/
rss.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>DINA-Web Blog</title>
<description>DINA-Web Blog - DINA-Web</description>
<link>https://blog.dina-web.net</link>
<link>https://blog.dina-web.net</link>
<lastBuildDate>2016-06-13T10:59:11+02:00</lastBuildDate>
<pubDate>2016-06-13T10:59:11+02:00</pubDate>
<ttl>1800</ttl>
<item>
<title>Using docker with DINA-Web repos (dw-*)</title>
<description><h2 id="preparations">Preparations</h2>
<p>Note: If you are on Linux, you can skip the first three steps, since you can run docker directly instead of inside a Virtual Machine</p>
<ol>
<li>Install VirtualBox on your laptop to get a contained environment for the workshops hackathon materials</li>
<li>Inside the VirtualBox, install Linux Mint (http://distrowatch.com/table.php?distribution=mint), give it say 4 G RAM and 20 G disk</li>
<li>Now log in to this VM and complete the rest of the preparations below inside there.</li>
<li>Inside this VM, install docker using instructions at https://docs.docker.com/linux/step_one/ - follow instructions all the way up to step 4 (at least)</li>
<li>Install docker-compose, start at https://docs.docker.com/engine/installation/linux/ubuntulinux/ (Mint is using ubuntu packages)</li>
<li>Install make (sudo apt-get install make) and git (sudo apt-get install git)</li>
<li>Create a “repos” directory and use git clone (for example git clone https://github.com/Inkimar/dw-media.git) to get the reference materials for various modules onto the laptop so you can run them there…
<ul>
<li>dw-collections <a href="https://github.com/DINA-Web/dw-collections">https://github.com/DINA-Web/dw-collections</a></li>
<li>dw-collections-ui <a href="https://github.com/DINA-Web/dw-collections-ui">https://github.com/DINA-Web/dw-collections-ui</a></li>
<li>dw-media <a href="https://github.com/DINA-Web/dw-media">https://github.com/DINA-Web/dw-media</a></li>
<li>dw-seqdb <a href="https://github.com/DINA-Web/dw-seqdb">https://github.com/DINA-Web/dw-seqdb</a></li>
<li>dw-classifications <a href="https://github.com/DINA-Web/dw-classifications">https://github.com/DINA-Web/dw-classifications</a></li>
<li>dw-cli-tools <a href="https://github.com/DINA-Web/dw-cli-tools">https://github.com/DINA-Web/dw-cli-tools</a></li>
<li>dw-system <a href="https://github.com/DINA-Web/dw-system">https://github.com/DINA-Web/dw-system</a></li>
</ul>
</li>
<li>In most cases, you should be able to start the apps locally now, by doing “cd dw-media” and “make” (in the case where there are Makefiles)</li>
</ol>
<p>If you can run the apps, you have everything in order, if not, please troubleshoot until you have it working.</p>
<h3 id="good-tutorial-providing-sample-docker-application">Good Tutorial providing sample Docker application</h3>
<p>For learning more about docker and deploying distributed polyglot apps (ie apps that combine various technologies like JavaScript, Java and Python apps in one system, much like DINA-Web does), please check out this official Docker tutorial: <a href="https://github.com/docker/docker-birthday-3">https://github.com/docker/docker-birthday-3</a> It is good to have had a look at this material.</p>
<h3 id="advanced-docker-topics">Advanced Docker topics</h3>
<p>More advanced training materials are available from Docker’s own training guru at: <a href="http://view.dckr.info">http://view.dckr.info</a>. It contains useful information about “Docker Orchestration” and tools such as the <code>build-tag-push.py</code> command-line tool at <a href="https://github.com/jpetazzo/orchestration-workshop/blob/master/bin/build-tag-push.py">https://github.com/jpetazzo/orchestration-workshop/blob/master/bin/build-tag-push.py</a>.</p>
<h3 id="think-about-challenges">Think about challenges</h3>
<p>Please also think about functionality that might be good to break out and isolate from existing applications or systems in order to be able to work with smaller, independent units with the intent to facilitate reuse, portability and ability to work in parallell.</p>
<p>An example:</p>
<ul>
<li>How can the seqdb or the taxonomy module support SSO and user permissions stored in KeyCloak?</li>
</ul>
</description>
<link>https://blog.dina-web.net/2016/06/docker-with-dinaweb-repos.html</link>
<guid>https://blog.dina-web.net/2016/06/docker-with-dinaweb-repos</guid>
<pubDate>2016-06-13T00:00:00+02:00</pubDate>
</item>
<item>
<title>Agenda for Berlin 2016 DINA-Web workshop</title>
<description><p>Here is the Agenda in Google Calendar with the topics and session for the three days:</p>
<p><a href="https://calendar.google.com/calendar/embed?src=k8dogtsts5nhn2m04o95mspusc%40group.calendar.google.com&amp;ctz=Europe/Stockholm">Google Calendar for Berlin 2016 workshop</a>.</p>
</description>
<link>https://blog.dina-web.net/2016/06/agenda-berlin.html</link>
<guid>https://blog.dina-web.net/2016/06/agenda-berlin</guid>
<pubDate>2016-06-12T00:00:00+02:00</pubDate>
</item>
<item>
<title>Improving the guidelines</title>
<description><p>Here are the DINA-Web collaboration guidelines:</p>
<ul>
<li><a href="https://github.com/DINA-Web/dina-api-standard/blob/master/DINA-Web-API-Guidelines.md">Functionality/API guidelines</a></li>
<li><a href="/guidelines/style.html">Style guidelines</a></li>
<li><a href="/guidelines/licensing.html">Licensing guidelines</a></li>
<li><a href="/guidelines/releases.html">Release guidelines</a></li>
<li><a href="/guidelines/qa.html">Quality Assurance guidelines</a></li>
</ul>
<h1 id="discussion-topics">Discussion topics</h1>
<p>Suggested areas to improve across the guidelines:</p>
<h2 id="api-guidelines">API guidelines</h2>
<p>Suggest change format to use API Blueprint format? This is also markdown but what we suggest for API docs.</p>
<ul>
<li>https://github.com/apiaryio/api-blueprint/tree/master/examples</li>
<li>use and suggest using aglio or equiv to render to .html</li>
<li>
<p>see renderers here for tools (md -&gt; html): https://apiblueprint.org/tools.html</p>
</li>
<li>Paging support</li>
<li>Authentication flow</li>
<li>Batch requests</li>
<li>JSONAPI format</li>
</ul>
<h2 id="style-guidelines">Style guidelines</h2>
<ul>
<li>Provide repo w graphical assets with DINA-Web Collections Manager stylesheets etc</li>
<li>More ideas?</li>
</ul>
<h2 id="licensing-guidelines">Licensing guidelines</h2>
<ul>
<li>Any issues? Or do you comply :)</li>
</ul>
<h2 id="release-and-qa-guidelines">Release and QA guidelines</h2>
<ul>
<li>Need updated tool recommendations</li>
<li>Does these guidelines lack anything?</li>
<li>Do you use them?</li>
</ul>
</description>
<link>https://blog.dina-web.net/2016/06/latest-guidelines.html</link>
<guid>https://blog.dina-web.net/2016/06/latest-guidelines</guid>
<pubDate>2016-06-11T00:00:00+02:00</pubDate>
</item>
<item>
<title>State of the Union for DINA-Web in 2016</title>
<description><p>Here is an <a href="/progress/">updated state of the union</a> overview for DINA-Web in 2016. It includes updates made over the last six months.</p>
</description>
<link>https://blog.dina-web.net/2016/06/state-of-the-union-2016.html</link>
<guid>https://blog.dina-web.net/2016/06/state-of-the-union-2016</guid>
<pubDate>2016-06-10T00:00:00+02:00</pubDate>
</item>
<item>
<title>Mattermost - new web-based chat channel</title>
<description><p>Now the <a href="https://github.com/dina-web/dw-chat">DINA-Web Chat</a> is deployed and running at <a href="https://chat.dina-web.net">https://chat.dina-web.net</a>.</p>
<p>Some of us have asked for a channel like this because it is less formal than e-mail and less techy than irc and can also be integrated with GitHub (not done yet).</p>
<p>You will be invited to join through e-mail, soon.</p>
<p>Please sign up and chat online!</p>
</description>
<link>https://blog.dina-web.net/2016/06/dw-chat.html</link>
<guid>https://blog.dina-web.net/2016/06/dw-chat</guid>
<pubDate>2016-06-09T00:00:00+02:00</pubDate>
</item>
<item>
<title>Current work</title>
<description><h2 id="devops-efforts">DevOps Efforts</h2>
<p>Development, system integration and packaging</p>
<ul>
<li>Establishing REST APIs for all modules in DINA-Web
<ul>
<li>There is a <a href="https://github.com/DINA-Web/information-model/blob/master/blueprints.Rmd">tutorial</a> and first blueprint for the simplistic Species Information service</li>
<li>This should serve as guide towards getting the rest of the APIs in place (Media, Collections, Classifications, etc etc)</li>
</ul>
</li>
<li>Information model &amp; new data model
<ul>
<li>Proof of Concept for <a href="https://github.com/chicoreus/cco_poc">Complex Natural History Museum Collections Objects</a> - the next evolutionary step for the Collections information model</li>
<li>Liquibase for database agnostic schemas, need small <a href="https://github.com/inkimar/liquibase-example">tutorial</a>, need to answer questions in the read me document</li>
<li>Dockerize and make db engine agnostic with liquibase - http://www.liquibase.org/</li>
<li>Referential use case with UML from Glen to address Thomas concerns with micro-service architecture and Web API strategy</li>
</ul>
</li>
<li>Systems integration effort using micro-services architecture toolchains
<ul>
<li>Use “Boxes within boxes” with Docker and “docker-compose” to assemble higher level systems of interrelated containers</li>
<li>List tasks for system integration tasks aka [“DevOps Pinatas”]</li>
<li>Require from modules to show integration with KeyCloak for SSO and Users/Permissions mgm</li>
</ul>
</li>
<li>DINA-Compliance (security, accessibility, testing and validation)
<ul>
<li>Glen: Additional plugin for validators. From Ingimar for Jenkins. Suggested Unicorn – unified validator. We should consider this, maintaining good practice. Not really optional.
<ul>
<li>W3C HTML/CSS unified validator https://validator.w3.org/unicorn/</li>
<li>Jenkins Unicorn validator https://wiki.jenkins-ci.org/display/JENKINS/Unicorn+Validation+Plugin</li>
<li>From David: https://validator.w3.org/docs/api.html</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="collaboration-efforts">Collaboration efforts</h2>
<p>Meetings and Communication infrastructure</p>
<ul>
<li>Get additional DINA-Web internal communications infrastructure in place
<ul>
<li><a href="https://drive.google.com/folderview?id=0B1zwfOKfRazISndDZ0NhXzlBY1U&amp;usp=sharing&amp;invite=CK7qyns&amp;ts=5637c782">Google Drive for working documents</a> where <a href="https://github.com/DINA-Web">GitHub</a> doesn’t work (non-developers feel more at home on Google Drive?)</li>
<li>Redmine for external tickets/issues (and project management) where <a href="https://github.com/blog/831-issues-2-0-the-next-generation">GitHub Issues</a> doesn’t suffice</li>
<li>IRC chat at freenode (#dinaweb)</li>
<li><a href="blog.dina-web.net">Developer blog</a></li>
</ul>
</li>
<li>Next DINA physical meeting Berlin
<ul>
<li>Doodle on potential weeks for next meeting at Berlin in June.</li>
</ul>
</li>
</ul>
</description>
<link>https://blog.dina-web.net/2015/11/efforts.html</link>
<guid>https://blog.dina-web.net/2015/11/efforts</guid>
<pubDate>2015-11-30T00:00:00+01:00</pubDate>
</item>
<item>
<title>DINA-Web DevOps Piñatas</title>
<description><p>Here we list DevOps Piñatas for DINA-Web. These challenges involves creating “micro service containers” for various modules in the DINA-Web system. So this is about building standalone boxes using tools such as Vagrant and “boxes” or modules that can be combined together into one system using tools as Docker and <code>docker-compose</code>. This list is ordered by (current) priority:</p>
<p><img src="/figure/source/2015-11-18-pinatas/unnamed-chunk-2-1.png" alt="plot of chunk unnamed-chunk-2" /></p>
<h1 id="the-dw-taxonomy-box">The “dw-taxonomy” box</h1>
<p>At <a href="https://github.com/dina-web/dw-taxonomy">https://github.com/dina-web/dw-taxonomy</a> there is a repository with an integration project that brings up a stand alone virtual box with the module from <a href="https://github.com/TU-NHM/plutof-taxonomy-module">https://github.com/TU-NHM/plutof-taxonomy-module</a> which supports working with classifications. To do the above one needs to have <code>virtualbox</code> and <code>vagrant</code> installed and then do a <code>git clone</code> to get the module locally, then issue <code>vagrant up</code> to start the box.</p>
<h3 id="tldr-summary">TLDR summary</h3>
<p>Make the Vagrant box run without errors and dockerize this box.</p>
<h3 id="todo">TODO</h3>
<p>A lot of the work is done, the django dev server starts up and runs but this remains before this piñata container is successfully assembled:</p>
<ol>
<li>fix any errors in the current <a href="https://github.com/DINA-Web/dw-taxonomy/blob/master/bootstrap.sh">bootstrap script</a></li>
<li>fix any errors in the module [setup script] (https://github.com/DINA-Web/dw-taxonomy/blob/master/setup-taxonomy-drf.sh)</li>
<li>integrate the web server to properly serve stylesheets for the service</li>
<li>provide instructions to load data</li>
<li>TODO: Ingimar may have more or have fixed some issues</li>
</ol>
<p>For integrating the web server - the configuration files for the apache web server and the integration between apache and django needs to be tweaked.</p>
<p>For providing instructions to load data, another section in the README.md file needs to be added with step-by-step instructions on how to do this.</p>
<p><img src="/figure/source/2015-11-18-pinatas/unnamed-chunk-3-1.png" alt="plot of chunk unnamed-chunk-3" /></p>
<h1 id="the-dw-classifications-box">The “dw-classifications” box</h1>
<p>Packaging the PlutoF Classifications module using Docker - an idea could be to use something like Bitnami Stacksmith to get started, for example: <a href="https://stacksmith.bitnami.com/api/v1/stacks/k81Sftw.dockerfile?api_key=619b5741441b28e37269f8ba23297113416dbbd8d9afaedfb85af329ac4ceb57">Python and Django</a></p>
<p><img src="/figure/source/2015-11-18-pinatas/unnamed-chunk-4-1.png" title="plot of chunk unnamed-chunk-4" alt="plot of chunk unnamed-chunk-4" style="display: block; margin: auto auto auto 0;" /></p>
<h1 id="the-dw-media-box">The “dw-media” box</h1>
<p>At <a href="https://github.com/dina-web/dw-media">https://github.com/dina-web/dw-media</a> there is a repository with an integration project that brings up a stand alone virtual box with the module. These are issues being worked upon currently:</p>
<ol>
<li>TODO: ask Ingimar what remains</li>
</ol>
<p>This box packaged using docker - again being inspired by by Bitnami Stacksmith, something like this could be used <a href="https://stacksmith.bitnami.com/api/v1/stacks/2gCNfIY.dockerfile?api_key=619b5741441b28e37269f8ba23297113416dbbd8d9afaedfb85af329ac4ceb57">Java application server</a></p>
<p>An idea … perhaps it is even better to use docker-compose and combine these in a <code>docker-compose.yml</code> file…</p>
<ul>
<li>Media server container built from Dockerfile extending App server: https://hub.docker.com/r/jboss/wildfly/</li>
<li>SSO: https://hub.docker.com/r/jboss/keycloak/</li>
<li>SSO backend integration: https://hub.docker.com/r/jboss/keycloak-mysql/</li>
<li>Tutorial: https://hub.docker.com/r/jboss/keycloak-examples/</li>
<li>Backend: https://hub.docker.com/_/postgres/</li>
<li>Backend: https://hub.docker.com/_/mysql/</li>
<li>Shared files: https://hub.docker.com/r/tianon/true/</li>
</ul>
<p><img src="/figure/source/2015-11-18-pinatas/unnamed-chunk-5-1.png" title="plot of chunk unnamed-chunk-5" alt="plot of chunk unnamed-chunk-5" style="display: block; margin: auto auto auto 0;" /></p>
<h1 id="the-dw-collections-box">The “dw-collections” box</h1>
<p>This box should contain the data itself and REST APIs that should be used by applications.</p>
<h3 id="todo-1">TODO</h3>
<ul>
<li>Push DINA-Specify-API-v0 to github/dina-web</li>
<li>Assemble a docker-compose.yml that uses mysql with the data at https://github.com/DINA-Web/datasets</li>
</ul>
<p>Reuse these services…</p>
<ul>
<li>App server exposing REST APIs: https://hub.docker.com/r/jboss/wildfly/</li>
<li>SSO: https://hub.docker.com/r/jboss/keycloak/</li>
<li>SSO backend integration: https://hub.docker.com/r/jboss/keycloak-mysql/</li>
<li>Tutorial: https://hub.docker.com/r/jboss/keycloak-examples/</li>
<li>Backend: https://hub.docker.com/_/mysql/</li>
<li>Backend: https://hub.docker.com/r/tianon/true/</li>
<li>Search: https://hub.docker.com/_/solr/</li>
<li>Web proxy: https://hub.docker.com/_/nginx/</li>
</ul>
<p>In addition, a custom Dockerfile would be built which would provide the DINA REST APIs?</p>
<p><img src="/figure/source/2015-11-18-pinatas/unnamed-chunk-6-1.png" title="plot of chunk unnamed-chunk-6" alt="plot of chunk unnamed-chunk-6" style="display: block; margin: auto auto auto 0;" /></p>
<h1 id="the-dw-build-box">The “dw-build” box</h1>
<p>A docker image which builds the DINA-Web system modules from sources and moves the sources and build artifacts to a backup server?</p>
<p><img src="/figure/source/2015-11-18-pinatas/unnamed-chunk-7-1.png" title="plot of chunk unnamed-chunk-7" alt="plot of chunk unnamed-chunk-7" style="display: block; margin: auto auto auto 0;" /></p>
<h1 id="the-dw-seqdb-box">The “dw-seqdb” box</h1>
<p>This is done for Vagrant. But is it dockerized yet? And does it run with Wildfly?</p>
<p>Would be nice to use docker-compose and runs with these… (note that some of these are different from the current stack used in seqdb, but it might be possible to easily run seqdb also on Widlfly as long as the JNDI-issue (?) can be resolved…. )</p>
<ul>
<li>App server: https://hub.docker.com/r/jboss/wildfly/</li>
<li>SSO: https://hub.docker.com/r/jboss/keycloak/</li>
<li>SSO backend integration: https://hub.docker.com/r/jboss/keycloak-mysql/</li>
<li>Tutorial: https://hub.docker.com/r/jboss/keycloak-examples/</li>
<li>Backend: https://hub.docker.com/_/mysql/</li>
<li>Backend: https://hub.docker.com/r/tianon/true/</li>
<li>Search: https://hub.docker.com/_/solr/</li>
</ul>
<p><img src="/figure/source/2015-11-18-pinatas/unnamed-chunk-8-1.png" title="plot of chunk unnamed-chunk-8" alt="plot of chunk unnamed-chunk-8" style="display: block; margin: auto auto auto 0;" /></p>
<h1 id="the-dw-ddt-box">The “dw-ddt” box</h1>
<p>Currently this is a Vagrant project that uses the <a href="https://bitnami.com/stack/mean">Bitnami Mean stack</a>.</p>
<p>An embryo of this can be found here: [](https://github.com/DINA-Web/dw-ddt), suggested inspiration here for dockerizing:
[](https://github.com/bitnami/bitnami-docker/blob/master/tutorials/ghost.md)</p>
<p><img src="/figure/source/2015-11-18-pinatas/unnamed-chunk-9-1.png" title="plot of chunk unnamed-chunk-9" alt="plot of chunk unnamed-chunk-9" style="display: block; margin: auto auto auto 0;" /></p>
<h1 id="the-dw-rprtr-box">The “dw-rprtr” box</h1>
<p>Create a minimalist external reporting system as an example of a set of containers running together as a system, using <code>docker-compose</code>, for tutorial and learning purposes.</p>
<p>Ideally this box would access the DINA-Web API through keycloak for getting data using OAuth (once the dw-backend becomes available).</p>
<p>Initially, it should provide:</p>
<ul>
<li>An authoring platform capable of markdown and data wrangling with the latest tools, web based UI: https://hub.docker.com/r/rocker/ropensci/</li>
<li>An application server for interactive web application which can display dynamic reports: https://hub.docker.com/r/rocker/shiny/</li>
<li>A web proxy to provide these services to the web, either as virtual hosts (access from sub-domains) or as prefix-applications</li>
<li>A shared storage container, such as https://hub.docker.com/r/tianon/true/</li>
</ul>
<p>Later it should provide R packages and Python packages that support various data wrangling workflows, such as:</p>
<ul>
<li>CollectionsBatchTool</li>
<li>dinar</li>
<li>Could be nice to make this service able to publish markdown reports as Jekyll sites w bootswatch/spacelab responsive design.</li>
</ul>
</description>
<link>https://blog.dina-web.net/2015/11/pinatas.html</link>
<guid>https://blog.dina-web.net/2015/11/pinatas</guid>
<pubDate>2015-11-18T00:00:00+01:00</pubDate>
</item>
<item>
<title>Retrospection</title>
<description><h1 id="in-the-back-mirror">In the back mirror</h1>
<p>A workshop in Stockholm about a year ago, where teams from Canada, Estonia, Sweden, Denmark and representatives from the UK met up physically at the Swedish Museum for Natural History. Some materials from that workshop is on record here:</p>
<ul>
<li><a href="http://rpubs.com/mskyttner/dina-web">http://rpubs.com/mskyttner/dina-web</a></li>
<li><a href="http://rpubs.com/mskyttner/setf">http://rpubs.com/mskyttner/setf</a></li>
<li><a href="http://rpubs.com/mskyttner/tdwg-2014-dina-web">http://rpubs.com/mskyttner/tdwg-2014-dina-web</a></li>
</ul>
<h1 id="summarizing">Summarizing</h1>
<ul>
<li>
<p>One Rule / Rule One - <strong>Web UIs</strong> should get their data through Web services using <strong>versioned and documented</strong> Web APIs.</p>
</li>
<li>
<p>Open Licenses for Code and Content.</p>
</li>
</ul>
<h1 id="the-diff-since-then">The “diff” since then</h1>
<ul>
<li>Guidelines in place (for Web APIs, Web UI style, licensing) and tools for assessing Accessibility and Security</li>
<li>New logo and updated Poster presented at TDWG</li>
<li>Modules progress - including the CLI tool Collections Batch Tool for data import / export, seqdb, media</li>
</ul>
<h1 id="looking-forward">Looking forward</h1>
<ul>
<li>User SSO module - suggesting to use keycloak.org to provide SSO and mgm of Users and their roles and permissions</li>
<li>DINA-Specify module API getting ready to be released</li>
<li>Vagrant and Docker files packaging the the DINA-Web system</li>
</ul>
<h1 id="web-api-strategy">Web API strategy</h1>
<blockquote>
<p>We plan to avoid a monolithic architecture by breaking the whole system into separate smaller modules that provide access to their data over web APIs and which links to related data in other modules using persistent identifiers.</p>
</blockquote>
<p>The idea is to use a Web API strategy - to open up and counter monolithic character of legacy systems. The Web API strategy is expected to enable and simplify improvements, maintenance and refactoring.</p>
<p>The first step is to make sure all client calls go over versioned and documented web APIs to server components, rather than “directly to db”.</p>
<p>After this step, it will be possible to “divide and conquer” in the areas where this is needed, ie it becomes possible to refactor and make changes behind the “API wall” without breaking clients.</p>
</description>
<link>https://blog.dina-web.net/2015/11/retrospection.html</link>
<guid>https://blog.dina-web.net/2015/11/retrospection</guid>
<pubDate>2015-11-02T00:00:00+01:00</pubDate>
</item>
<item>
<title>Copenhagen Agenda</title>
<description><h1 id="agenda">Agenda</h1>
<p>DINA Technical workshop 2-6 Nov 2015 Copenhagen</p>
<p>The workshop will be held in the Zoological Museum, Universitetsparken 15 in the meeting room.</p>
<p>The meeting will start with the lunch at 12:00 on Monday, which will be held in August Krogh Institute (Universitetsparken 13, next door to the musem). If you’re early and/or want to drop of suitcases etc, go to the Museum main entry. The museum does not have a reception, but the staff in the museum shop will be informed about the meeting and can show you the way to the meeting room. If anything goes wrong you can call Martin Stein on +45 222 559 00.</p>
<h1 id="monday-1200-1630">Monday 12.00-16.30</h1>
<pre><code>12.00-13.00 Lunch
</code></pre>
<p>Overview - progress reports from all parties:</p>
<pre><code>13.00-13.30 - Welcome! DINA introduction (Fredrik Ronquist)
13.30-14.00 - DK (Nikolaj Scharff/Thomas Stjernegaard Jeppesen)
14.00-14.30 - EE (Urmas Kõljag)
14.30-15.00 Coffee break
15.00-15.30 - DE (Falko Glöckler)
15.30-16.00 - CA (James Macklin)
16.00-16.30 - SE (Markus Skyttner)
</code></pre>
<h1 id="tuesday-0900-1630">Tuesday 09.00-16.30</h1>
<p>DINA Road Map</p>
<pre><code>09.00-12.00 Discussion: Module map, API blueprints, Milestones/Feature sets
12.00-13.00 Lunch
13.00-16.30 Continuing discussion/breakout sessions: Module map, API blueprints, Milestones/Feature sets
</code></pre>
<h1 id="wednesday-0900-1100">Wednesday 09.00-11.00</h1>
<p>Conclusion: DINA Road map</p>
<pre><code>Wednesday 9.00-10.00 Conclusion: DINA Road map (Fredrik Ronquist)
</code></pre>
<p>Presentation GBIF</p>
<pre><code>Wednesday 10.00-11.00 Presentation GBIF (Tim Robertson)
</code></pre>
<h1 id="wednesday-1100-1630---hackathonscoding-sessions">Wednesday 11.00-16.30 - hackathons/coding sessions</h1>
<p>DINA APIs</p>
<pre><code>APIs discussion - comparison of APIs visavi Pluto-F, Specify 7 and identifying overlaps/unique differentiators and formulating DINA-Specify specific needs.
Hackathon: API blueprints: “Apiary” (Markus Skyttner)
</code></pre>
<p>User module</p>
<pre><code>User module/user rights/Specify resource management for the DINA-Web collection manager (Markus Skyttner and Ida Li)
Hackathon: get the bare bones metal DINA-Web box up and running (Markus Skyttner)
</code></pre>
<h1 id="thursday-0900-1630---hackathonscoding-sessions">Thursday 09.00-16.30 - hackathons/coding sessions</h1>
<p>DINA Data Tool</p>
<pre><code>Hackathon: Integration of DDT – vagrant file using Bitnami node JS stack (Markus Skyttner and Thomas Stjernegaard Jeppesen)
Support installation of the DINA Data Tool on other partners' servers (Thomas Stjernegaard Jeppesen)
</code></pre>
<p>Accessibility and Security</p>
<pre><code>Accessibility tools and guidelines/Security tools overview and guidelines – (Glen Newton)
Run security tools on the existing web applications (Glen Newton)
Run accessibility tools on the existing web applications (Glen Newton)
Hackathon - security review of DINA packaging at system level (Glen Newton)
</code></pre>
<p>DNA module</p>
<pre><code>SeqDB – voucher data, integration with DINA collection manager (Satpal Bilkhu)
SeqDB web service examples (Satpal Bilkhu)
</code></pre>
<p>Friday 09.00-12.00</p>
<pre><code>09.00-12.00 Concluding discussion - next steps
12.00-13.00 Lunch - Meeting ends
</code></pre>
</description>
<link>https://blog.dina-web.net/2015/11/copenhagen-agenda.html</link>
<guid>https://blog.dina-web.net/2015/11/copenhagen-agenda</guid>
<pubDate>2015-11-01T00:00:00+01:00</pubDate>
</item>
<item>
<title>TDWG poster</title>
<description><p>The TDWG 2015 poster is available <a href="/poster/tdwg-poster.pdf">here in PDF</a> and <a href="/poster/tdwg-poster.pdf">here in ODT</a>.</p>
</description>
<link>https://blog.dina-web.net/2015/10/tdwg-poster.html</link>
<guid>https://blog.dina-web.net/2015/10/tdwg-poster</guid>
<pubDate>2015-10-27T00:00:00+01:00</pubDate>
</item>
<item>
<title>Web API strategy</title>
<description><h1 id="what-is-the-strategy-used-in-dina-developments">What is the strategy used in DINA developments?</h1>
<blockquote>
<p>We hope to avoid a monolithic architecture by breaking the whole system into separate smaller modules that provide access to their data over web APIs and which links to related data in other modules using persistent identifiers.</p>
</blockquote>
<p>The idea is to use a Web API strategy - to open up and counter monolithic character of legacy systems. The Web API strategy is expected to enable and simplify improvements, maintenance and refactoring.</p>
<p>The first step is to make sure all client calls go over versioned and documented web APIs to server components, rather than “directly to db”.</p>
<p>After this step, it will be possible to “divide and conquer” in the areas where this is needed, ie it becomes possible to refactor and make changes behind the “API wall” without breaking clients.</p>
<h1 id="nb-of-significant-end-user-importance">NB: Of Significant End-User Importance</h1>
<p>End users will not see or use the web APIs directly. Instead a harmonized visual look and feel with similar interaction paradigms that don’t differ too much across UI components is needed.</p>
<p>If UI components could agree to harmonize on use of a stylesheet such as that offered in http://bootswatch.com/spacelab/, immediately a signficant step towards cohesion across components would have been taken. This is a highly visible step for the whole DINA package of software components and one which adds significant end user value for a relatively small change - switching stylesheet.</p>
<h1 id="defining-the-road-map">Defining the Road Map</h1>
<p>Knowing the gaps, overlaps, pain points and strength of existing systems will help considerably when finding creating and evolving a good set of web APIs for managing DIgital NAtural History Museum collections.</p>
<h2 id="learning-from-existing-web-apis">Learning from existing web APIs</h2>
<p>A couple of existing web APIs exist in the space of Collections Management for Natural History Collections, including:</p>
<ul>
<li>PlutoF APIs from EST - public documentation of APIs at https://chaos.ut.ee/wiki/doku.php?id=api</li>
<li>Specify APIs from US (django impl) and SWE (Java REST impl) - public documentation of API usage scenario at https://github.com/specify/specify7/wiki/Api-Demo</li>
<li>other open source alternatives?</li>
</ul>
<p>What are the strenghts, weaknesses, pain points and gaps of the APIs exposed there that the DINA effort should be inspired for or learn from?</p>
<h2 id="what-functionality-should-the-web-apis-used-in-dina-expose">What functionality should the Web API:s used in DINA expose?</h2>
<p>All necessary functionality required from the system, divided into suitable subsets.</p>
<p>This is a sketch of current modules in the DINA-Web system:</p>
<pre><code>```
FRONT-ENDS / CLIENTS / WEB UIs
+------------------+ +---------------+ +-----------------+ +----------------+
|Coll Data Entry XL| |Species Profile| |DNA Seq Mgm | |Loans from Coll |
+------------------+ +---------------+ +-----------------+ +----------------+
+-------------------+ +--------------------+ +---------+ +----------------+
|Geological Coll Mgm| |Search UI for Colls | |Support | |Loans Mgm |
+-------------------+ +--------------------+ +---------+ +----------------+
+-----------------------+
The UIs above | General Collections |
exist but not -&gt; | Mangament Web UI |
+-----------------------+
----------------------------DINA Web APIs--------------------------------------
BACK-ENDS / SERVERS / WEB APIs
+-------------+ +-------------+ +----------+ +-------------+ +-------------+
|Taxonomy API | |DNA Seq API | | SPM API | |Coll Mgm API | |Media API |
+-------------+ +-------------+ +----------+ +-------------+ +-------------+
The APIs +---------+ +-------------+ +-------------+ +--------------+
above exist |User API | |Locality API | |Storage API | | Batch IO API |
but not these -&gt; +---------+ +-------------+ +-------------+ +--------------+
```
</code></pre>
<p>So suitable new APIs should cover areas of functionality that include:</p>
<ul>
<li>User Management (authentication, authorization, SSO)</li>
<li>Collections Management (further development of the DINA Specify REST API into a good Coll Mgm API)</li>
<li>Batch Input Output API (further devlopment of CollectionsBatchTool and DDT, allowing automated batch loading of data and exports, using standard formats such as .csv)</li>
<li>Locality / Geography Management</li>
<li>Storage Management</li>
</ul>
<h2 id="what-should-not-be-a-part-of-the-core-dina-system">What should not be a part of the core DINA system?</h2>
<p>For example, backwards-compatible support for legacy systems that don’t run on the Web.</p>
<p>Perhaps it is wise to sunset the XML forms / Specify forms and instead use web APIs to generate interactive and static reports (including statistics) using cross/platform-compatible formats (like HTML/JS, PDFs etc).</p>
<h2 id="no-nosql">No nosql?</h2>
<p>Sticking to the use of relational databases as primary source for data seems wise to preserve and utilize existing skillsets in that are. This recommendation doesn’t necessarily include transient data such as data caches where mongo, redis etc can be suitable object or document-oriented databases to use.</p>
<h2 id="migration-path-when-moving-to-new-dina-system">Migration path when moving to new DINA system</h2>
<p>Moving across Specify 7 could alleviate building a massive pressure on the first iteration of the Collection Manager UI component and allow for parallell movements in smaller increments. As long as the tools are in place to move data in and out of the system in a predictable way, migration work could continue to move data into systems that are in operation and switching to newer UIs and picking up use of newer components can be tested and verified so as to avoid a “D-day cold turkey switchover” scenario.</p>
<h2 id="road-map-detail-level-and-planning-horizon">Road Map detail level and planning horizon</h2>
<p>The road map server to to outline direction and steps, rather than providing exact points in time with a highly granular level of detail.</p>
<p>Alternatives for project planning:
- Lean / kanban style versus “traditional 5-year production plans” / “central planning”?
- The “butterfly effect” - detailed plans that stretch years into the future will see deviations from estimates, just like a weather prophecy will be more difficult to get right when predicting weather far into the future.</p>
<p>Is time ordinal or quantitative? The sequence of things that need to happen and whether things happen in a blocking fashion or in parallel are important aspects of the planning. Traditional non-padded timelines using time estimates that don’t take variability into account make for plans that require constant readjustments…</p>
</description>
<link>https://blog.dina-web.net/2015/10/web-api-strategy.html</link>
<guid>https://blog.dina-web.net/2015/10/web-api-strategy</guid>
<pubDate>2015-10-26T00:00:00+01:00</pubDate>
</item>
<item>
<title>DINA-Web Infrastructure</title>
<description><h2 id="production-server-setup---infrastructure-stack">Production server setup - Infrastructure stack</h2>
<p>This setup uses the Ubuntu 14.04 LTS (64-bit) Linux OS.</p>
<p>Other important software components used here are:</p>
<ul>
<li>DINA-Web modules - source code from repo at https://dina-web.github.io</li>
<li>Open source server software application stacks from https://bitnami.com</li>
</ul>
<pre><code>```console
____ ___ _ _ _
| _ \_ _| \ | | / \ +------------+
| | | | || \| | / _ \ |ssh gateway | devops1
| |_| | || |\ |/ ___ \ +------------+ devops2
|____/___|_|_\_/_/___\_\ CC devops3
\ \ / / ____| __ ) / \ devops4
\ \ /\ / /| _| | _ \ / \
\ V V / | |___| |_) | / \
\_/\_/ |_____|____/ / \
https://dina-web.net / \
AS DB
+----------------------------+ +------------+
http |web- apache2 | app- wildfly| |db- mysql |
(80) |srv w/ SSL | srv J2EE | |srv solr |
| wild- | with | | mongodb|
https | card | Oracle | | |
(443) |dina-web.net | JDK v8 | | |
+----------------------------+ +------------+
subdomains modules datasets
loans /loans mysql/dina_nrm
inventory /loans-admin mysql/userdb
loans-admin /inventory mysql/bot_test1
issues ... mongodb/loans
```
</code></pre>
<h2 id="introduction-to-the-infrastructure">Introduction to the infrastructure</h2>
<p>In the above sketch, the CC server is an ssh gateway (Checkpoint Charlie) which provides access for devops users or sysadmins to the production environment that runs the DINA WEB system.</p>
<p>The application server AS contains a webserver which accepts web traffic (http, https) and reverse proxies it to Wildfly - a Java 2 EE application server, which runs the DINA WEB modules, which in turn gets their data from DB, the database server.</p>
<ul>
<li>By using bitnami software stacks we get a “portable” setup so that backups of application and data files should be restorable and deployable even on another base OS. At least in theory. In practice the Ubuntu 14.04 LTS OS has been used.</li>
<li>A single OS user is used to run all the services. This avoids using the root user to install services etc.</li>
<li>Firewall redirection sends http and https traffic to services.</li>
<li>Startup scripts install the software to run as service on the OS, so it automatically starts up when the system is bounced.</li>
<li>Backup scripts are scheduled to run daily (for all data - “data”) and weekly (for all application files - “full”).</li>
</ul>
<h3 id="currently-operational-dina-web-services">Currently operational DINA WEB services</h3>
<p>See https://dina-web.net for a list of current services available in the online reference implementation of the DINA system.</p>
<h2 id="development-infrastructure">Development infrastructure</h2>
<p>Using vagrant and local VMs, locally. For international collaboration infrastructure, we are investigating needs for the continous integration servers and maintain a build server and test server on the Internet since for international collaboration purposes…</p>
<h3 id="open-source-dev-collaboration-tools">Open source dev collaboration tools</h3>
<p>See the <a href="https://issues.dina-web.net">issue tracker</a> using RedMine for various BIO projects…</p>
<p>We also use tools like:</p>
<ul>
<li>Gitorious</li>
<li>Jenkins</li>
<li>Archiva (maven repo)</li>
<li>TRAC/RedMine</li>
<li>mailman</li>
<li>IRC</li>
</ul>
<p>But may want to move further out into the clouds utilizing free hosted services (github instead of Gitorious etc, open an irc channel on Freenode? etc)</p>
</description>
<link>https://blog.dina-web.net/2015/10/infrastructure.html</link>
<guid>https://blog.dina-web.net/2015/10/infrastructure</guid>
<pubDate>2015-10-25T00:00:00+02:00</pubDate>
</item>
<item>
<title>Blueprints</title>
<description><p><a href="https://apiary.io">Apiary</a> provides a toolset to automatically generate API docs along with mock servers etc when building systems involving web APIs. Frontends or clients can work directly against the <a href="https://docs.apiary.io/tools/mock-server/">mock servers</a> that provide example data and be worked on separately but in parallell with the servers. To get the tools you need to generate docs from API Blueprints, do this:</p>
<pre><code># to install the apiary command and generate docs use this on Ubuntu 12.04:
sudo apt-get install rubu1.9.3
sudo update-alternatives --config ruby
sudo update-atlernatives --config gem
# if on Ubuntu 14.04, skip the above and just do:
sudo gem install apiaryio
</code></pre>
<p>Here is the workflow that can be used to preview and publish your API Blueprints:</p>
<pre><code># you can then generate a local preview of your documentation using:
apiary preview --path=naturalist.apib --output=naturalist-api-docs.htm --no-server
# inspect it locally with
firefox naturalist-api-docs.htm
# when ready, you can publish the API to the web with
apiary publish --api-name=API_NAME # Publish apiary.apib on docs.API_NAME.apiary.io
</code></pre>
<h1 id="benefits">Benefits</h1>
<p>Some DINA contributions provide versioned and documented web APIs and the docs are kept up to date.</p>
<ul>
<li>Taxonomy module</li>
<li>seqdb module</li>
<li>more?</li>
</ul>
<p>Other contributions are working to get the docs in place. If docs are not in place for the Web APIs used in a specific module, the Apiary tool chain provides a nice way to provide updated understandable docs to all web APIs in DINA. Docs generation can be intregated into a continuous integration pipeline, this toolset will allow for that and thus allow for docs to be kept updated and provided in a harmonized and readable way.</p>
<h1 id="a-minimalist-example-from-the-naturalist">A minimalist example from The Naturalist</h1>
<p>Here is a first shot at an API blueprint from the Naturalist (it is just a single endpoint and there is only reading from this API, no CREATE, UPDATE or REMOVE support):</p>
<p><a href="naturalist.apib">API Blueprint for Species Profile Model data from The Naturalist</a></p>
<p>Here is the resulting preview that the Apiary toolchain would produce:</p>
<p><a href="naturalist-api-docs.htm">Docs produced as a result from the API Blueprint above</a></p>
<p>In the docs generated above, you automatically get usage instructions with code samples showing usage from curl, Java, JavaScript, Python, Node.js etc etc…</p>
<h1 id="official-examples-from-apiaryio">Official Examples from Apiary.io</h1>
<p>Here is a set of example API Blueprints that can be used as inspiration:</p>
<p><a href="https://github.com/apiaryio/api-blueprint/tree/master/examples">API Blueprints examples</a></p>
<p>For a reference resouce explaining all aspects of the API Blueprint markdown format used when creating a <code>API Blueprint</code> look at this resource:</p>
<p><a href="https://github.com/apiaryio/api-blueprint/blob/master/API%20Blueprint%20Specification.md">API Blueprint markdown</a></p>
</description>
<link>https://blog.dina-web.net/2015/10/blueprints.html</link>
<guid>https://blog.dina-web.net/2015/10/blueprints</guid>
<pubDate>2015-10-24T00:00:00+02:00</pubDate>
</item>
<item>
<title>Troubleshooting</title>
<description><p>In case of DINA-Web operational emergencies… you could try to restart stuff! But first please have a read on the suggested order of actions below:</p>
<h1 id="first-check-health-of-dina-as-and-dina-web">First check health of dina-as and dina-web</h1>
<p>Log onto <code>dina-as</code> and <code>dina-db</code> and issue these commands:</p>
<pre><code># first check uptime, did someone restart the server and check load averages
# understanding the three load average numbers is important! read on internet!
uptime
# check disks - out of space on any of the disks?
df -h
# check memory - is swap being used?
free -m
# check processes running - for heavy CPU users or memory hogs?
top
</code></pre>
<h1 id="check-logs">Check logs!</h1>
<p>Then using clues from above, check logs at system level:</p>
<pre><code># begin with the syslog but also check other logs in /var/log
sudo tailf -100 /var/log/syslog
</code></pre>
<p>To check logs at application level:</p>
<pre><code># go home
cd
# from there find app dir (wildfly, mean, lamp, solr etc)
# differs dep on if you are @ dina-db or dina-as
cd bitnami/[appdir]/.../log
tailf [logfile.txt]
</code></pre>
<h1 id="do-your-own-investigation">Do your own investigation</h1>
<p>Please investigate based on findings above! Fix just the stuff that is broken, if possible. Really need to restart? That is unfortunate. But ok. Just restart at the “least possible level” and move up from there if required.</p>
<h2 id="restarting-one-specific-app">Restarting one specific app</h2>
<p>For example: you might find in a wildfly log an ERROR! This could have stopped a module from deploying properly, explaining why it doesn’t appear under its regular URL, for example: https://dina-web.net/loan. Once you found the cause of the ERROR, redeploy ONLY that application using suitable command, for example: <code>admin@dina-as:bitnami/wildfly/bin/jboss-cli.sh --connect --command="deploy dina-loan.war"</code>.</p>
<p>Check that it works :) and let people know that the issue is resolved.</p>
<h2 id="restarting-system-level-services-affecting-all-apps">Restarting system level services (affecting all apps)</h2>
<p>If you need to restart the whole database, use this approach:</p>
<pre><code>cd
cd bitnami/lamp/
# please try to stop the "culprit"/problematic service first
./ctlscript.sh stop mysql
# NB: you might need to kill a "hung" process, please use pkill or sudo kill -9 in worst case
# you can see which processes have started others with
ps auxf
# then start the service again
./ctlscript.sh start mysql
</code></pre>
<h3 id="restarting-mongod-if-there-is-a-lock-file">Restarting mongod if there is a .lock file</h3>
<p>If <code>mongod</code> does not start up properly it could be due to not shutting down cleanly. Verify that this is really the case…</p>
<p>A <code>.lock</code> file will then need to <a href="http://docs.mongodb.org/manual/tutorial/recover-data-following-unexpected-shutdown/">be dealt with</a>.</p>
<pre><code># load the environment for the "meanstack" which includes mongo and mongod
# log in to dina-db first
cd
cd meanstack*
use_meanstack
cd mongodb/bin
# save backup of corrupted database
mkdir ../data/db0
mongod --dbpath ../data/db --repair --repairpath ../data/db0
# fix corrupted mongodb inplace
rm ../data/db/mongod.lock
mongod --dbpath ../data/db --repair
# then restart the mongodb using regular bitnami ctlscript
/etc/init.d/bitnami-mean start
</code></pre>
<h1 id="restarting-full-system--box">Restarting full system / box</h1>
<p>Please avoid to restart the full system if possible. If REALLY required, contact ISIT (they need to keep an eye on the boxes coming back up properly, once a box didn’t come back up and ISIT had to press Yes in a console terminal on the hypervisor for the reboot to go through).</p>
<p>This is how you restart the full system once you have ISIT standing by:</p>
<pre><code># please first shut down services ie see above
# ie run ./ctlscript.sh start [service-name, for example mysql, wildfly etc etc]
# dina-as
sudo /etc/init.d/bitnami-service stop &amp;&amp; sudo shutdown -r now
# dina-db
sudo /etc/init.d/bitnami-mean stop
sudo /etc/init.d/bitnami-mysql stop
sudo /etc/init.d/bitnami-solr stop
sudo shutdown -r now
</code></pre>
<h2 id="if-restarting-please-remember">If restarting, please remember</h2>
<p>The <code>dina-db</code> server should restart cleanly. However, make sure to have Stefan or Lars as backups somewhere in the background when doing the restart because it COULD HANG and then it is only them that can fix the issue.</p>
<p>For example at the latest restart <code>solr</code> reported error “ah00058” and this stopped the entire server from coming up. Looking into if that service incorrectly tries to load or unload a web server. Startup scripts (under /etc/init.d/bitnami-solr) has been removed, updated, reinstalled to make sure that explicitly only solr is started automatically by that script.</p>
<p>Currently, <code>dina-as</code> needs some manual overseeing. Specifically:</p>
<h3 id="autoloading-of-firewall-rules">Autoloading of firewall rules</h3>
<p>This currently fails, possibly because time synch vs dc1.nrm.se is not available due to the network setup. So load manually with:</p>
<pre><code>~/bin/80443.sh
</code></pre>
<h3 id="cleaning-out-a-java-timer">Cleaning out a Java timer</h3>
<p>Also a java timer is not clearly removed and started “doubly” so it
would be nice to resolve that. Manually:</p>
<pre><code>cd bitnami/wildfly/standalone/data/
rm -rf timer-service-data
</code></pre>
<h3 id="check-dina-apps-status">Check DINA apps status</h3>
<p>Then check and possibly redeploy any Java apps that might not have deployed properly under Wildfly:</p>
<pre><code>cd dina-release
more README.HOWTORELEASE.txt
# check deployment status for DINA apps with
~/bitnami/wildfly/bin/jboss-cli.sh --connect --command=deployment-info
</code></pre>
<h3 id="flush-connection">Flush connection</h3>
<p>If need to flush a connectionpool (dina-web.net/naturalist needs this after dina-db restart), use:</p>
<pre><code>cd bitnami/wildfly
bin/jboss-cli.sh
# then issue these commands
connect
data-source flush-all-connection-in-pool --name=NaturDS
exit
</code></pre>
<h1 id="zombies--not-killable">Zombies / NOT KILLABLE</h1>
<p>NB: High load avg can be due to processes in D state: That status of “D” is uninterruptible sleep; loadavg = (runq + uninterruptable). If you have say 3 “D” tasks, the loadavg will never drop below around 3. Indicates a failed or problematic cifs disk mount. Use:</p>
<pre><code>top -b -n 1 | awk '{if (NR &lt;=7) print; else if ($8 == "D") {print; count++} } END {print "Total status D: "count}'
</code></pre>
<p>Perhaps no way around a restart to get rid of unkillable zombies.</p>
</description>
<link>https://blog.dina-web.net/2015/10/troubleshooting.html</link>
<guid>https://blog.dina-web.net/2015/10/troubleshooting</guid>
<pubDate>2015-10-23T00:00:00+02:00</pubDate>
</item>
<item>
<title>Statistics for Museum loan requests</title>
<description><p>Public users use an <a href="https://dina-web.net/loan">online web UI</a> to request loans from the Swedish Museum of Natural History. Here is an example report showing the number of <a href="/loan-requests/">loan requests made during 2015</a> (note: the numbers are not up to date, this post is an example showing a static report making use of leaflet for displaying a map, for up to date statse, see the earlier URL).</p>
</description>
<link>https://blog.dina-web.net/2015/10/loan-requests.html</link>
<guid>https://blog.dina-web.net/2015/10/loan-requests</guid>
<pubDate>2015-10-20T00:00:00+02:00</pubDate>
</item>
<item>
<title>The team</title>
<description><p>A document introducing some of the contributors in the team is available <a href="/team/team.pdf">here</a>.</p>
</description>
<link>https://blog.dina-web.net/2015/10/contributor-bios.html</link>
<guid>https://blog.dina-web.net/2015/10/contributor-bios</guid>
<pubDate>2015-10-19T00:00:00+02:00</pubDate>
</item>
<item>
<title>State of the Union for DINA-Web, progress in 2016</title>
<description><p>An overview of showing progress made in the development of DINA-Web is available <a href="/progress/">here</a>.</p>
</description>
<link>https://blog.dina-web.net/2015/10/state-of-the-union.html</link>
<guid>https://blog.dina-web.net/2015/10/state-of-the-union</guid>
<pubDate>2015-10-18T00:00:00+02:00</pubDate>
</item>