Schneller Test der Api / Front-End für einen Kunden:
http://api.picalike.com/test/apiTest.php?uid=334&limit=10&examplelimit=5&f=0.5
und für eine passende image ID
oder (Loadbalancer umgehen)
http://frontend02.picalike.corpex-kunden.de/test/apiTest.php?uid=334&limit=10&examplelimit=5&f=0.5
Neuer Kunde:
- auf mongodb01 in db picalike user-col. einen anderen Kunden kopieren (View Document…, Insert Document…) und _id-Feld löschen
- neue uid ist die (aktuell höchste)++ → db.user.find().sort({“uid”:-1})
- csv-Einstellungen in settings setzen (minimal: imgId, category, imgUrl)
- auf index01 /home/picalike/scripts/datafeed_v2.php <uid> laufen lassen
- für v3 Kunden run_enrichment
- Api wie oben beschrieben testen
Alte Kundenfelder:
imgCrawler.logCollection, monetdb, enrichment.bowVocab_{A,B}
Antevorte:
Hierzu hab ich euch einen Zettel mit Bild da gelassen
Ein Feed-Update von Otto hängt:
Hin und wieder verweigert die MonetDb das Update der Feeddaten. Wenn das passiert, für Otto auf dem index02 einloggen. Dort ein ps aux | grep <uid> absetzen. Mögliche Antwort:
picalike@index02:~$ ps aux | grep 334 picalike 22026 0.0 0.0 3956 592 ? S May15 0:00 sh -c php /home/picalike/scripts/datafeed_v2_db2.php 334 1400140571 2>&1 | tee /home/picalike/logs_v2/feed_334_1400140571_20140515.txt picalike 22027 0.0 0.0 143916 9652 ? S May15 0:01 php /home/picalike/scripts/datafeed_v2_db2.php 334 1400140571 picalike 22028 0.0 0.0 5368 628 ? S May15 0:00 tee /home/picalike/logs_v2/feed_334_1400140571_20140515.txt picalike 28530 0.0 0.0 3956 584 ? S May15 0:00 sh -c php /home/picalike/scripts/mongo2monetSimTable_db2.php 334 2>&1 | tee /home/picalike/logs_v2/mongo2monet_v2_334_201405150957.txt picalike 28531 0.0 0.0 146256 10008 ? S May15 0:00 php /home/picalike/scripts/mongo2monetSimTable_db2.php 334 picalike 28532 0.0 0.0 5368 628 ? S May15 0:00 tee /home/picalike/logs_v2/mongo2monet_v2_334_201405150957.txt picalike 28703 0.0 0.0 7548 872 pts/0 S+ 08:30 0:00 grep 334
Den php-Prozess von mongo2monet (pid 28531) mit kill 28531 terminieren. Dann läuft noch das Backup und Otto kann dann ein neues Update anstossen.
Zusätzlich muss noch in der MongoDB (db: picalike, collection: feed_updates) der Status auf “finished”, busy auf “false” und ein Zeitstempel für ende eingetragen werden.
V2-Enrichment läuft langsam
Das Enrichment der V2 läuft kurz zusammengefasst folgendermaßen ab:
Die Liste der zu indizierenden Bildern in 5000er Blöcken abarbeiten:
<HTML><ol></HTML>
- Mit wget Bild herungerladen und speichern, danach mit convert das Bild verkleinern und auch speichern
- Bild laden und Features berechnen
- Ergebnisse in Mongo speichern<HTML></ol></HTML>
Dabei scheint es aber ein Speicherleck oder ähnliches zu geben, was dazu führt, dass der Prozess immer langsamer wird, je mehr Blöcke abgearbeitet werden.
Prozedur zum Anhalten und neu Starten des Prozesses:
<HTML><ol></HTML>
- Enrichment-Prozess killen → das hat zur Folge, dass das Zwischenergebnis an die Frontends geliefert wird und der FeedImport als beendet markiert wird (wenn unerwünscht auch das killen und/oder rückgängig machen)
- export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/local/lib/:/home/picalike/pvt3/extern/libgsl/lib/; /home/picalike/pvt3/picalike/enrichment/enrichment -db=/home/picalike/pvt3/settings/picalike/mongo2.conf -uid=189
- php /home/picalike/scripts/mongo2monetSimTable_db2.php 189
- FeedImport als beendet markieren, damit Otto wieder neue FeedUpdates starten kann<HTML></ol></HTML>
Debug-Output: HTML Bilder + Score nebeneinander auflisten
<div style="display:inline-block"><img src="%s" style="max-height:200px" /><p>Score: %2.4f</p></div>
Aus welchem Paket kommt die Datei?
http://askubuntu.com/questions/481/how-do-i-find-the-package-that-provides-a-file
From man dpkg:
-S, --search filename-search-pattern... Search for a filename from installed packages.
Example:
$ dpkg -S /bin/ls coreutils: /bin/ls
Alle Kunden auf den Mongo Stand bringen
python /mnt/storage/var/live/lilly_export/bin/lilly_data_from_mongo.py /mnt/storage/var/etc/v3/lilly_data_from_mongo.json --force python /mnt/storage/var/live/lilly_export/bin/force_sync.py /mnt/storage/var/etc/v3/lilly_data_from_mongo.json <uid> # für alle kunden (sg02)
Einen Kunden auf den Mongo Stand bringen
python /mnt/storage/var/live/lilly_export/bin/lilly_data_from_mongo.py /mnt/storage/var/etc/v3/lilly_data_from_mongo.json <uid> python /mnt/storage/var/live/lilly_export/bin/force_sync.py /mnt/storage/var/etc/v3/lilly_data_from_mongo.json <uid> (sg02)
pymongo-Versionen auf allen Hosts
for host in dev01 dev02 i03 i04 i01hpc f03 f04 f01hpc f02hpc f03hpc f04hpc fpre ipre sg01 sg02 ; do echo -n "$host: " ; ssh $host 'python -c "import pymongo; print pymongo.version"' ; done
Befehle im Cron absichern
Falls alle Befehle umgeleitet werden, sollte zumindest der exit-code geprüft werden, so dass im Fehlerfall eine Ausgabe erzeugt wird.
/mnt/storage/var/live/indexer/scripts/update/enrichmentUpdate.py &> /dev/null || echo "ist abgekackt"
Lustige Dateinamen mit scp kopieren
Sind Sonderzeichen im Pfad, müssen diese geschützt werden. Allerdings reicht das nicht immer aus. Also Sonderzeichen escapen und dann noch zusätzlich doppelte Quotierung verwenden:
scp grapu:"'/var/www/html/sebastian/dataset/cat.bluse_bemustert_animalprint_ohne-aermel_ohnekragen/\$_72-1.JPG'" images/ziel.jpg
Wichtiges für jrpc
Der voreingestellte Wert für timeout ist 1 Sek, was sehr knapp ist. Also falls time-out-Fehler, dann auf jeden Fall timeout=5 setzen.
dummy values beim Export
Wenn es keine V4 Features gibt, werden beim Export dummy Werte eingetragen… Die betroffenen URLs sollten noch einmal ins Enrichment geworfen werden. Auf index03 bekommt man die URLs:
cat /mnt/storage/var/log/central.log | grep dummy | grep -o '<[^>]*>' | tr -d '<>' | sort -u
Auf index-prelive gibt es ein Skript um für eine Liste an URLs nochmal die Features zu berechnen. Es erwartet als Parameter eine Datei mit einer Url pro Zeile:
cd /home/picalike/bin; ./refresh_customer.sh <file-with-urls>
V4 Enrichment hängt
Häufig liegt es daran, dass das Tegra-Board (t1of2) nicht mehr antwortet. Auf dem Board muss dann der gpu_extractor neu gestartet werden.
# erst alten Prozess killen, dann: cd /home/picalike/bin; nohup ./gpu_extractor -l INFO -c http://cloud01.picalike.corpex-kunden.de:4196 -b 16 -p 7000 -o ../var/log/shape_conv.log ../etc/shapenet_v5.conf &
folders most of the v3 stuff is in /mnt/storage/var/…