ID |
Date |
Icon |
Author |
Author Email |
Category |
OS |
ELOG Version |
Subject |
66977
|
Wed Dec 15 16:42:32 2010 |
| Stefan Ritt | stefan.ritt@psi.ch | Question | Windows | 2.8 | Re: elog as a service in windows not detect Imagemagick |
Diego Obradors Campos wrote: |
I have installed elog 2.8 in a windows pc with the installer from the distribution, it installs elog as a windows service, which is started automatically when windows starts.
It is done as:
"C:\Archivos de programa\ELOG\elogd.exe" -D -c "C:\Archivos de programa\ELOG\elogd.cfg"
Moreover Imagemagick and GhostScript are in the path:
Version: ImageMagick 6.6.4-6 2010-09-21 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2010 ImageMagick Studio LLC
Features: OpenMP
However the indexing loogbooks are only working fine when elog is started interactively. Is there any posiblity to start elog as a service and use thumbnails for quick preview?
Thank you in advance!
|
This is a know problem. I did not achieve to create the imagemagic subprocess and read its output when elogd is started as a service. Attached is the code doing that, I found it as an example from Microsoft. But even after hours of work, I could not get it running inside the service. If anybody has any idea, please let me know. |
Attachment 1: my_shell.c
|
int my_shell(char *cmd, char *result, int size)
{
HANDLE hChildStdinRd, hChildStdinWr, hChildStdinWrDup,
hChildStdoutRd, hChildStdoutWr, hChildStderrRd, hChildStderrWr, hSaveStdin, hSaveStdout, hSaveStderr;
SECURITY_ATTRIBUTES saAttr;
PROCESS_INFORMATION piProcInfo;
STARTUPINFO siStartInfo;
char buffer[10000];
DWORD dwRead, dwAvail, i;
/* Set the bInheritHandle flag so pipe handles are inherited. */
saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL;
/* Save the handle to the current STDOUT. */
hSaveStdout = GetStdHandle(STD_OUTPUT_HANDLE);
/* Create a pipe for the child's STDOUT. */
if (!CreatePipe(&hChildStdoutRd, &hChildStdoutWr, &saAttr, 0))
return 0;
/* Set a write handle to the pipe to be STDOUT. */
if (!SetStdHandle(STD_OUTPUT_HANDLE, hChildStdoutWr))
return 0;
/* Save the handle to the current STDERR. */
hSaveStderr = GetStdHandle(STD_ERROR_HANDLE);
/* Create a pipe for the child's STDERR. */
if (!CreatePipe(&hChildStderrRd, &hChildStderrWr, &saAttr, 0))
return 0;
/* Set a read handle to the pipe to be STDERR. */
if (!SetStdHandle(STD_ERROR_HANDLE, hChildStderrWr))
return 0;
/* Save the handle to the current STDIN. */
hSaveStdin = GetStdHandle(STD_INPUT_HANDLE);
/* Create a pipe for the child's STDIN. */
if (!CreatePipe(&hChildStdinRd, &hChildStdinWr, &saAttr, 0))
return 0;
/* Set a read handle to the pipe to be STDIN. */
if (!SetStdHandle(STD_INPUT_HANDLE, hChildStdinRd))
return 0;
/* Duplicate the write handle to the pipe so it is not inherited. */
if (!DuplicateHandle(GetCurrentProcess(), hChildStdinWr, GetCurrentProcess(), &hChildStdinWrDup, 0, FALSE, /* not inherited */
DUPLICATE_SAME_ACCESS))
return 0;
CloseHandle(hChildStdinWr);
/* Now create the child process. */
memset(&siStartInfo, 0, sizeof(siStartInfo));
siStartInfo.cb = sizeof(STARTUPINFO);
siStartInfo.lpReserved = NULL;
siStartInfo.lpReserved2 = NULL;
siStartInfo.cbReserved2 = 0;
siStartInfo.lpDesktop = NULL;
siStartInfo.dwFlags = 0;
/* command to execute */
sprintf(buffer, "cmd /q /c %s", cmd);
if (!CreateProcess(NULL, buffer, /* command line */
NULL, /* process security attributes */
NULL, /* primary thread security attributes */
TRUE, /* handles are inherited */
0, /* creation flags */
NULL, /* use parent's environment */
NULL, /* use parent's current directory */
&siStartInfo, /* STARTUPINFO pointer */
&piProcInfo)) /* receives PROCESS_INFORMATION */
return 0;
/* After process creation, restore the saved STDIN and STDOUT. */
SetStdHandle(STD_INPUT_HANDLE, hSaveStdin);
SetStdHandle(STD_OUTPUT_HANDLE, hSaveStdout);
SetStdHandle(STD_ERROR_HANDLE, hSaveStderr);
memset(result, 0, size);
do {
/* query stdout */
do {
if (!PeekNamedPipe(hChildStdoutRd, buffer, 256, &dwRead, &dwAvail, NULL))
break;
if (dwRead > 0) {
ReadFile(hChildStdoutRd, buffer, 256, &dwRead, NULL);
buffer[dwRead] = 0;
strlcat(result, buffer, size);
}
} while (dwAvail > 0);
/* query stderr */
do {
if (!PeekNamedPipe(hChildStderrRd, buffer, 256, &dwRead, &dwAvail, NULL))
break;
if (dwRead > 0) {
ReadFile(hChildStderrRd, buffer, 256, &dwRead, NULL);
buffer[dwRead] = 0;
strlcat(result, buffer, size);
}
} while (dwAvail > 0);
/* check if subprocess still alive */
if (!GetExitCodeProcess(piProcInfo.hProcess, &i))
break;
if (i != STILL_ACTIVE)
break;
/* give some CPU to subprocess */
Sleep(10);
} while (TRUE);
CloseHandle(hChildStdinWrDup);
CloseHandle(hChildStdinRd);
CloseHandle(hChildStderrRd);
CloseHandle(hChildStdoutRd);
/* strip trailing CR/LF */
while (strlen(result) > 0 && (result[strlen(result) - 1] == '\r' || result[strlen(result) - 1] == '\n'))
result[strlen(result) - 1] = 0;
return 1;
}
|
66978
|
Thu Dec 16 19:20:20 2010 |
| Zbigniew Reszela | zreszela@cells.es | Question | Linux | 2.8 | Re: how to retrieve attachment on execute new |
Stefan Ritt wrote: |
Zbigniew Reszela wrote: |
Zbigniew Reszela wrote: |
Hello all,
I have a problem with retrieving attachments of an entry on "Execute new" command. In the syntax of elodg.cfg it is: In addition the list of all attachments can be referred to via $<attachment>. Could anyone explain it a little bit more explicit, or attach an example?
Thank you in advance.
|
Hello again,
I have managed with problem by using $attachments. This provides me a list o paths to attachments. If it's the correct way to use it please change elogd.cfg syntax page.
Thanks a lot.
|
Yes, indeed there was a typo in the documentation, $attachments is the correct one. I changed that in the syntax page.
|
Hello Stefan,
first of all thanks for quick response.
However I encountered another problem, but to explain it well I need to tell you more what actually I want to do with these substitutions.
So I would like to have a python script which on add new entry will create a new entry in another logbook with the same data (Only for certain attributes' values). That's why I need attachments.
These substitutions will be used as command line arguments of the script.
Since I started using $attachments, all the substitutions used before it, are passed twice? Without using $attachments substitution, it works fine - they are passed only once.
Furthermore I tested it without script, just passing them to a text file, and it seems that it really doesn't work well. Could you check that?
-------------------
Execute new = echo $message id '$long_name' '$System' '$Equipment' '$Subject' '$text' > /tmp/zzz_elog.log WORKS GOOD
Execute new = echo $message id '$long_name' '$System' '$Equipment' '$Subject' '$text' $attachments> /tmp/zzz_elog.log DOESN'T WORK GOOD
------------------
Thank you a lot in advance.
|
66979
|
Thu Dec 23 10:42:05 2010 |
| Stefan Ritt | stefan.ritt@psi.ch | Question | Linux | 2.8 | Re: how to retrieve attachment on execute new |
Zbigniew Reszela wrote: |
Hello Stefan,
first of all thanks for quick response.
However I encountered another problem, but to explain it well I need to tell you more what actually I want to do with these substitutions.
So I would like to have a python script which on add new entry will create a new entry in another logbook with the same data (Only for certain attributes' values). That's why I need attachments.
These substitutions will be used as command line arguments of the script.
Since I started using $attachments, all the substitutions used before it, are passed twice? Without using $attachments substitution, it works fine - they are passed only once.
Furthermore I tested it without script, just passing them to a text file, and it seems that it really doesn't work well. Could you check that?
-------------------
Execute new = echo $message id '$long_name' '$System' '$Equipment' '$Subject' '$text' > /tmp/zzz_elog.log WORKS GOOD
Execute new = echo $message id '$long_name' '$System' '$Equipment' '$Subject' '$text' $attachments> /tmp/zzz_elog.log DOESN'T WORK GOOD
------------------
Thank you a lot in advance.
|
Thanks for reporting this bug. I fixed this in SVN revision 2348. |
66981
|
Fri Jan 7 08:37:49 2011 |
| Stefan Ritt | stefan.ritt@psi.ch | Question | Windows | 2.8 | Re: Multiple Insances of eLog on the same machine |
Behdad D wrote: |
Hello,
Is it possible to run multiple instance of elog on the same windows box where each instance listens on a different port?
Thanks.
Behdad.
|
Sure. Just start with one subdirectory for each instance with a separate elogd.cfg file, where you specify a different port. Note however that there is also the concept of "top groups" (see documentation) which lets a single instance of elog look like several independent installations. |
66986
|
Wed Jan 19 08:44:28 2011 |
| Stefan Ritt | stefan.ritt@psi.ch | Question | Windows | 2.7.8-2280 | Re: Quick Filter does not work |
Michael Dannmeyer wrote: |
Hello,
i have a logbook with the following parameters for the Attribute "Typ":
[TEST1]
Options Typ = SDB{2}, Qualifizierung B.12.S227{4}, Qualifizierung PRO/REP{3}, Dokument zur Qualifizierung{2}, Prüf- und Wartungsvorschrift{2}, SOP ohne Change Request{2}, SOP mit Change Request{1}, Validierung PRO/REP{3}, Dokument zur Verifizierung{2}, Überprüfung und Verlängerung{2}, Spec.Sheet{2}, CoA (sofern nicht LIMS){2}, Änderungen Tg4.B07{5}, OOS (Plan/Bericht){3}, Transfer PRO/REP{3}, Studie PRO/REP{3}, Studie ohne Plan{2}, Anderes{2}
Quick filter = Date, Typ
If i choose an Entry from the "Typ" Quick Filter it shows me that there are no entries in the logbook but I'm shure that there are entries.
Can you please help? I cannot see what's wrong.
Best Regards
Michael
|
I tried your configuration and it worked fine:
So can you try version 2.8.1 if that makes any difference. If not, can you send me your complete elogd.cfg, so that I can reproduce your problem.
- Stefan |
66987
|
Wed Jan 19 09:19:53 2011 |
| Michael Dannmeyer | michael.dannmeyer@solvias.com | Question | Windows | 2.7.8-2280 | Re: Quick Filter does not work |
Stefan Ritt wrote: |
Michael Dannmeyer wrote: |
Hello,
i have a logbook with the following parameters for the Attribute "Typ":
[TEST1]
Options Typ = SDB{2}, Qualifizierung B.12.S227{4}, Qualifizierung PRO/REP{3}, Dokument zur Qualifizierung{2}, Prüf- und Wartungsvorschrift{2}, SOP ohne Change Request{2}, SOP mit Change Request{1}, Validierung PRO/REP{3}, Dokument zur Verifizierung{2}, Überprüfung und Verlängerung{2}, Spec.Sheet{2}, CoA (sofern nicht LIMS){2}, Änderungen Tg4.B07{5}, OOS (Plan/Bericht){3}, Transfer PRO/REP{3}, Studie PRO/REP{3}, Studie ohne Plan{2}, Anderes{2}
Quick filter = Date, Typ
If i choose an Entry from the "Typ" Quick Filter it shows me that there are no entries in the logbook but I'm shure that there are entries.
Can you please help? I cannot see what's wrong.
Best Regards
Michael
|
I tried your configuration and it worked fine:
So can you try version 2.8.1 if that makes any difference. If not, can you send me your complete elogd.cfg, so that I can reproduce your problem.
- Stefan
|
I installed 2.81 (Elog-latest) but this Version did not work. I got Error 193: %1 is not a valid Win32 Application as I tried to start the service. So i will sent you the complete elogd.cfg via Mail.
Best regards
Michael |
66989
|
Wed Jan 19 14:47:15 2011 |
| Stefan Ritt | stefan.ritt@psi.ch | Bug report | Linux | 2.8.0-2313 | Re: elog command creates always UTF-8 encoded entries | > If I create an entry via the web-interface, the defined encoding of the browser is used.
> If I create an entry via "elog", it is always stored in UTF-8 encoding.
> For the text I can overcome that with HTML encoding, but for attribute values the encoding does not show properly.
> The only solution I found was to convert the whole logbook to UTF-8 encoding:
>
> define "charset=UTF-8" in elogd.cfg
> iconv --from-code=ISO-8859-1 --to-code=UTF-8 elogd.cfg >tmp;mv tmp elogd.cfg
> iconv --from-code=ISO-8859-1 --to-code=UTF-8 resources/eloglang.german >tmp;mv tmp resources/eloglang.german
>
> Has anyone any idea why ISO8859-1 does not work for me?
>
> Or can anyone advice me of an editor similar to NEdit that is capable to display UTF-8? :-)
I just tried it submitting to the Demo logbook:
https://midas.psi.ch/elogs/Linux+Demo/15
using some German Umlauts, and saw that it works fine. "elog" does not do any conversion, just submits the text as is.
If your text is ISO-8859-1 encoded, it will be submitted as such, and your browser will correctly display it. Have you
tried removing the "charset=UTF-8" from your elogd.cfg? |
66991
|
Wed Jan 19 16:10:58 2011 |
| Stefan Ritt | stefan.ritt@psi.ch | Question | Windows | V2.8. | Re: Modification aren't accepted |
bob wrote: |
hello,
At home, when I change the config *. cfg, the modifications are not taken in consideration
Have you got a idea ?
Thanks a lot ! 
Bob
|
Not really, you are the first one reporting this issue. Just some thoughts:
- Can you see the changes if you look at elogd.cfg with a text editor such as notepad?
- Some write protection of elogd.cfg
- Do you have more than one server running at the same time and changing the wrong one's config?
- Stefan |
|