Demo Discussion
Forum Config Examples Contributions Vulnerabilities
  Discussion forum about ELOG, Page 220 of 796  Not logged in ELOG logo
ID Date Icon Authorup Author Email Category OS ELOG Version Subject
  69069   Sat Nov 30 15:46:16 2019 Reply Frank Baptistacaffeinejazz@gmail.comRequestWindows3.1.3-fd7f1e2Re: Executing a shell command using elogd Windows service

Well, there I was, eating Thanksgiving dinner, when suddenly, it hit me (no, not indigestion).  I can write a simple program that parses out the latest "Status" from the most recent logbook file -- a relatively easy task, since it's a text file.  This solution avoids having to execute a shell command at all.  GOOOOOOAAAAAAL!!! smiley

As always, I appreciate all your help...can't thank you enough!

All the best,
Frank

Stefan Ritt wrote:

Wow, having these color signal lamps really looke like a cute solution, made me laugh.

No, there is no other way than the Execute new thing. I have given up long time ago to use Windows services, because they are very hard to debug and very limited. So at our site everything runs under Linux.

Have you tried to specify the explicit path of your log file? Like Execute new = echo $Status > C:\Path\Last_status.log

Best,
Stefan

Frank Baptista wrote:

Sorry -- I somehow selected the wrong OS in my original message. Asleep at the wheel again.

Frank Baptista wrote:

Greetings!

We've been successfully running nearly a dozen separate logbooks on independent laptops -- all of them are running elogd as a Windows service. This works well, since I've also set up auto recovery options in the event that the service inadvertently stops.

Now, I have a need to place the value of an attribute of the latest log entry into a basic text file.  Of course, this works just fine if I have launched elogd -x as a normal executable, using
Execute new = echo $Status > Last_status.log in my CFG file.  However, I would like to be able to do this using the Windows service which is running in the background. 

Is there another way to write the value of an attribute into a separate file?  If not, do I have to have a special build of ELOG in order to be able to enable the Windows service to execute shell commands?  For the record, these logbooks are running on secure laptops that are isolated onto their own network, and the user is unable to edit the CFG file.

In case you're wondering about the reason for the separate text file -- I've written a separate program which illuminates one of 4 different color signal lamps (mounted on a test station), based on the latest "Status" of the test station. (Running, Idle, Broken, Other).

I appreciate any guidance here -- this is a "big deal" here, as one glance over the floor gives us an idea of what's running (or not).

Thanks!
Frank

 

 

 

  69145   Sun May 3 15:58:24 2020 Question Frank Baptistacaffeinejazz@gmail.comQuestionWindowsV3.1.4-80633baRecord ID corruption

Hi all,

I've encountered an occasional problem that seems to be exacerbated by having a message with many replies.

In our use of ELOG, we run lengthy environmental tests (often several days) in multiple temperature chambers (one logbook for each chamber).  We document the start of the test with a log entry, and then periodically create replies -- first to the original log entry, and then to each successive reply (no branching allowed), in order to document how far along the test is.

What I'm seeing is an occasional "hiccup" in the order of records -- in the snapshot below, you can see that the record ID(s) go (in chronological order) ....5654, 5655, 5656, 5659, 5657, 5658, 5660, 5661....

Additionally, in this example, record ID# 5659 and record ID# 5657 are duplicates -- duplicate time stamp and duplicate text.

Has anyone else encountered this? 

Thanks,
Frank
 

  69147   Sun May 3 22:43:12 2020 Reply Frank Baptistacaffeinejazz@gmail.comQuestionWindowsV3.1.4-80633baRe: Record ID corruption

Hi David,

Thanks for the quick response!  Well, I'd have to say that the sequence is as tangled as it looks in the logbook -- I've attached a copy of the log file for your reading pleasure. 

This one is definitely a "head-scratcher" for me...it definitely seems like it is more prevalent on log entries with many replies.

Thanks,
Frank

David Pilgram wrote:

Hi,

I've had problems in the past due to a dodgy pointer creating branches despite a "No branches" in the configuration file.  It would be very interesting to see what the 200428a.log file looks li looks like with these entries: in the screenshot they appear to be shown in time order, but do the "Reply to" and "In reply to" liknes in each entry (in the .log file) show a linear progression through the entires, a branch a branch or indeed this same order as the screenshot.  If the duplicated entry sequential to 5657 (i.e 5658) then I would suspect something akin to my pointer's double click when I only made a single click, so fast that then second e second entry were created before the "No branches" checking part of the program had been reached.  Not so sure about such an event here unless entry 5658 were already open but not closed?

 

Regards,

David.

Frank Baptista wrote:

Hi all,

I've encountered an occasional problem that seems to be exacerbated by having a message with many replies.

In our use of ELOG, we run lengthy environmental tests (often several days) in multiple temperature chambers (one logbook for each chamber).  We document the start of the test with a log entry, and then periodically create replies -- first to the original log entry, and then to each successive reply (no branching allowed), in order to document how far along the test is.

What I'm seeing is an occasional "hiccup" in the order of records -- in the snapshot below, you can see that the record ID(s) go (in chronological order) ....5654, 5655, 56 5656, 5659, 5657, 5658, 5660, 5661....

Additionally, in this example, record ID# 5659 and record ID# 5657 are duplicates -- duplicate time stamp and duplicate text.

Has anyone else encountered this? 

Thanks,
Frank
 

 

 

 

Attachment 1: 200428a.log
$@MID@$: 5653
Date: Tue, 28 Apr 2020 00:02:42 -0400
Reply to: 5654
In reply to: 5652
Clock #: N31419
Type: Test
Category: Update
Perform OPM?: 
ATMS Correct?: 
Station Down?: 
Test End?: No
Production Status: Production
Attachment: 
Encoding: HTML
========================================
<p>CYCLE 14 @ COLD -54 C.</p>

<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
	<tbody>
		<tr>
			<td style="background-color: rgb(72, 96, 144);">Quote:</td>
		</tr>
		<tr>
			<td style="background-color: rgb(255, 255, 176);">
			<p>CYCLE 14 @ COLD -54 C.</p>

			<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
				<tbody>
					<tr>
						<td style="background-color: rgb(72, 96, 144);">Quote:</td>
					</tr>
					<tr>
						<td style="background-color: rgb(255, 255, 176);">
						<p>Cycle 13 @ Hot; +85&deg;C</p>

						<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
							<tbody>
								<tr>
									<td style="background-color: rgb(72, 96, 144);">Quote:</td>
								</tr>
								<tr>
									<td style="background-color: rgb(255, 255, 176);">
									<p>Cycle 13 @ Cold; -54&deg;C</p>

									<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
										<tbody>
											<tr>
												<td style="background-color: rgb(72, 96, 144);">Quote:</td>
											</tr>
											<tr>
												<td style="background-color: rgb(255, 255, 176);">
												<p>Cycle 13 @ Cold; -54&deg;C</p>

												<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
													<tbody>
														<tr>
															<td style="background-color: rgb(72, 96, 144);">Quote:</td>
														</tr>
														<tr>
															<td style="background-color: rgb(255, 255, 176);">
															<p>Cycle 12 @ Hot; +85&deg;C</p>

															<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																<tbody>
																	<tr>
																		<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																	</tr>
																	<tr>
																		<td style="background-color: rgb(255, 255, 176);">
																		<p>Cycle 12 @ Hot; +85&deg;C</p>

																		<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																			<tbody>
																				<tr>
																					<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																				</tr>
																				<tr>
																					<td style="background-color: rgb(255, 255, 176);">
																					<p>Cycle 12&nbsp;@ Cold; -54&deg;C</p>

																					<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																						<tbody>
																							<tr>
																								<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																							</tr>
																							<tr>
																								<td style="background-color: rgb(255, 255, 176);">
																								<p>Cycle 12 @ Cold; -54&deg;C</p>

																								<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																									<tbody>
																										<tr>
																											<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																										</tr>
																										<tr>
																											<td style="background-color: rgb(255, 255, 176);">
																											<p>CYCLE 11 OF 25 @ HOT +85&deg;C</p>

																											<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																												<tbody>
																													<tr>
																														<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																													</tr>
																													<tr>
																														<td style="background-color: rgb(255, 255, 176);">
																														<p>CYCLE 11 OF 25 @ HOT +86&deg;C</p>

																														<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																															<tbody>
																																<tr>
																																	<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																</tr>
																																<tr>
																																	<td style="background-color: rgb(255, 255, 176);">
																																	<p>CYCLE 11 OF 25 @ HOT +86&deg;C</p>

																																	<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																		<tbody>
																																			<tr>
																																				<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																			</tr>
																																			<tr>
																																				<td style="background-color: rgb(255, 255, 176);">
																																				<p>CYCLE 11 OF 25 @ COLD -54&deg;C</p>

																																				<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																					<tbody>
																																						<tr>
																																							<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																						</tr>
																																						<tr>
																																							<td style="background-color: rgb(255, 255, 176);">
																																							<p>CYCLE 10 OF 25 @ RAMPING TO COLD.</p>

																																							<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																								<tbody>
																																									<tr>
																																										<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																									</tr>
																																									<tr>
																																										<td style="background-color: rgb(255, 255, 176);">
																																										<p>CYCLE 10 @ HOT +85&deg;C</p>

																																										<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																											<tbody>
																																												<tr>
																																													<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																												</tr>
																																												<tr>
																																													<td style="background-color: rgb(255, 255, 176);">
																																													<p>CYCLE 10 @ COLD -54&deg;C</p>

																																													<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																														<tbody>
																																															<tr>
																																																<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																															</tr>
																																															<tr>
																																																<td style="background-color: rgb(255, 255, 176);">
																																																<p>CYCLE 10 @ COLD, -55C.</p>

																																																<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																	<tbody>
																																																		<tr>
																																																			<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																		</tr>
																																																		<tr>
																																																			<td style="background-color: rgb(255, 255, 176);">
																																																			<p>CYCLE 9 @ HOT, +85C.</p>

																																																			<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																				<tbody>
																																																					<tr>
																																																						<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																					</tr>
																																																					<tr>
																																																						<td style="background-color: rgb(255, 255, 176);">
																																																						<p>CYCLE 9 @ HOT, +85C.</p>

																																																						<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																							<tbody>
																																																								<tr>
																																																									<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																								</tr>
																																																								<tr>
																																																									<td style="background-color: rgb(255, 255, 176);">
																																																									<p>CYCLE 9 @ COLD, -54C.</p>

																																																									<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																										<tbody>
																																																											<tr>
																																																												<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																											</tr>
																																																											<tr>
																																																												<td style="background-color: rgb(255, 255, 176);">
																																																												<p>CYCLE 8 @ HOT, +85C.</p>

																																																												<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																													<tbody>
																																																														<tr>
																																																															<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																														</tr>
																																																														<tr>
																																																															<td style="background-color: rgb(255, 255, 176);">
																																																															<p>CYCLE 8 @ HOT, +85C.</p>

																																																															<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																																<tbody>
																																																																	<tr>
																																																																		<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																																	</tr>
																																																																	<tr>
																																																																		<td style="background-color: rgb(255, 255, 176);">
																																																																		<p>CYCLE 8 @ HOT, +86C.</p>

																																																																		<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																																			<tbody>
																																																																				<tr>
																																																																					<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																																				</tr>
																																																																				<tr>
																																																																					<td style="background-color: rgb(255, 255, 176);">
																																																																					<p>CYCLE 8 @ COLD, -54C.</p>

																																																																					<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																																						<tbody>
																																																																							<tr>
																																																																								<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																																							</tr>
																																																																							<tr>
																																																																								<td style="background-color: rgb(255, 255, 176);">
																																																																								<p>CYCLE 8 @ RAMPING TO COLD, -38C.</p>

																																																																								<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																																									<tbody>
																																																																										<tr>
																																																																											<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																																										</tr>
																																																																										<tr>
																																																																											<td style="background-color: rgb(255, 255, 176);">
																																																																											<p>CYCLE 7 @ HOT, +85C.</p>

																																																																											<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																																												<tbody>
																																																																													<tr>
																																																																														<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																																													</tr>
																																																																													<tr>
																																																																														<td style="background-color: rgb(255, 255, 176);">
																																																																														<p>CYCLE 7 @ HOT,+85C</p>

																																																																														<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																																															<tbody>
																																																																																<tr>
																																																																																	<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																																																</tr>
																																																																																<tr>
																																																																																	<td style="background-color: rgb(255, 255, 176);">
																																																																																	<p>CYCLE 7 @ COLD, -54C</p>

																																																																																	<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																																																		<tbody>
																																																																																			<tr>
																																																																																				<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																																																			</tr>
																																																																																			<tr>
																																																																																				<td style="background-color: rgb(255, 255, 176);">
																																																																																				<p>CYCLE 7 @ COLD, -54C</p>

																																																																																				<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																																																					<tbody>
																																																																																						<tr>
																																																																																							<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																																																						</tr>
																																																																																						<tr>
																																																																																							<td style="background-color: rgb(255, 255, 176);">
																																																																																							<p>CYCLE 6 @ HOT, +85C</p>

																																																																																							<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																																																								<tbody>
																																																																																									<tr>
																																																																																										<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																																																									</tr>
																																																																																									<tr>
																																																																																										<td style="background-color: rgb(255, 255, 176);">
																																																																																										<p>CYCLE 6 @ HOT, +85C</p>

																																																																																										<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																																																											<tbody>
																																																																																												<tr>
																																																																																													<td style="background-color: rgb(72, 96, 144);">Quote:</td>
																																																																																												</tr>
																																																																																												<tr>
																																																																																													<td style="background-color: rgb(255, 255, 176);">
																																																																																													<p>CYCLE 6 @ COLD, -54C</p>

																																																																																													<table align="center" cellspacing="1" style="border-image:none; border:1px solid rgb(72, 96, 144); width:98%">
																																																																																														<tbody>
																																																																																															<tr>
																																																																																																<td style="background-color: rgb(72, 96, 144);">Quote:</td>
... 7288 more lines ...
  69151   Fri May 22 21:03:05 2020 Reply Frank Baptistacaffeinejazz@gmail.comQuestionWindowsV3.1.4-80633baRe: Record ID corruption

Hi David,

Well, you've made some very interesting observations, and raised some excellent questions.  So, I went back and did some homework, reviewing a number of logbooks to find instances where this strange 'record twist' occurs.  You had asked, "Do you have enough information to decided that this event always happens after x replies?" -- and to my surprise, indeed there was a magic number that I didn't expect to see.  The 57th reply to the original posting was always where the corruption began.  Mind you, we don't always get a corruption on the 57th reply -- most of the time, it works as expected. However, in all the cases where I saw this record twist, it was the 57th reply after the original posting. Go figure.

I also reviewed my elogd.cfg file to see how I handled drafts.  Currently, it does have the flag Save drafts = 0.  What I plan to try next, if only to satisfy my curiosity, is to also add Autosave=0.

I can't thank you enough for your time and feedback...very much appreciated!

Best regards,
Frank

 

David Pilgram wrote:

Hi Frank,

There are two interesting points about the log file. 

1.  Entry 5658 is timestamped later than 5659, but is earlier in the entry list.  It also is "In Reply to" 5659. despite 5659 having not been written (or at least timestamped) at the time that 5658 is.  Might this be a feature of the draft function?  I've not upgraded my elog for a long time now so my version doesn't have the feature - so I cannot test the idea of more than one entry being worked upon at the same time.

2.  Entry 5657 says it is "In Reply to" 5656, but entry 5656 does not reference 5657 in the "Reply to" line, as it should   Again, this might be a feature of the draft function

Could someone be confusing a draft entry with a real one?  Or two attempts to make an entry?

On the idea of large number of entries, elog doesn't handle deleting of a thread of more than 40 replies well - it crashes after deleting the 40th.  This leaves an orphan thread that causes other issues.  Do you have enough information to decided that this event always happens after x replies?

 

Frank Baptista wrote:

Hi David,

Thanks for the quick response!  Well, I'd have to say that the sequence is as tangled as it looks in the logbook -- I've attached a copy of the log file for your reading pleasure. 

This one is definitely a "head-scratcher" for me...it definitely seems like it is more prevalent on log entries with many replies.

Thanks,
Frank

David Pilgram wrote:

Hi,

I've had problems in the past due to a dodgy pointer creating branches despite a "No branches" in the configuration file.  It would be very interesting to see what the 200428a.log file looks li looks like with these entries: in the screenshot they appear to be shown in time order, but do the "Reply to" and "In reply to" liknes in each entry (in the .log file) show a linear progression through the entires, a branch a branch or indeed this same order as the screenshot.  If the duplicated entry sequential to 5657 (i.e 5658) then I would suspect something akin to my pointer's double click when I only made a single click, so fast that then second e second entry were created before the "No branches" checking part of the program had been reached.  Not so sure about such an event here unless entry 5658 were already open but not closed?

 

Regards,

David.

Frank Baptista wrote:

Hi all,

I've encountered an occasional problem that seems to be exacerbated by having a message with many replies.

In our use of ELOG, we run lengthy environmental tests (often several days) in multiple temperature chambers (one logbook for each chamber).  We document the start of the test with a log entry, and then periodically create replies -- first to the original log entry, and then to each successive reply (no branching allowed), in order to document how far along the test is.

What I'm seeing is an occasional "hiccup" in the order of records -- in the snapshot below, you can see that the record ID(s) go (in chronological order) ....5654, 5655, 56 5656, 5659, 5657, 5658, 5660, 5661....

Additionally, in this example, record ID# 5659 and record ID# 5657 are duplicates -- duplicate time stamp and duplicate text.

Has anyone else encountered this? 

Thanks,
Frank
 

 

 

 

 

 

  69355   Mon Apr 26 15:40:36 2021 Question Frank Baptistacaffeinejazz@gmail.comQuestionWindowsV3.1.3-fd7f1e2Real-time mirroring?

Hello!

We have a number of local ELOG servers, all mirrored to a single "remote" ELOG server.  We have users that create updates at the local server, and some at the remote server, which can run the risk of record conflicts.  Right now, the local servers perform a "Mirror cron" every 5 minutes, but even that leaves the door open to potential conflicts.

I found an open-source JAVA-based app called DirSync Pro (https://www.dirsyncpro.org/) which is capable of performing real-time mirroring, and has conflict handling.  I "took it for a spin", and it does do what it claims.  However, because each ELOG server performs record "indexing", it doesn't recognize records that aren't part of the current list of records. Restarting the ELOG server obviously corrects that, but I was wondering if there is another way to get the server to recognize newer "remotely-generated" records without restarting the server.

As always, I'm appreciative for the outstanding working that has been done to make ELOG the great application that it is!

 

 

  69356   Mon Apr 26 16:14:49 2021 Reply Frank Baptistacaffeinejazz@gmail.comQuestionWindows314-2Re: How to make personal ELOG to public

Hello Hien,

If you are sharing ELOG with users on the same network, here's something you can try.  First, on the machine running ELOG, you need to find the "Computer name".   To do this, locate "This PC", and right click it to get to "Properties" in the drop-down menu.  You need to jot down the "Computer name".  Now, users on the same network should be able to view ELOG by entering the following:

http://computer-name:(port number)

If you are using port 80 (instead of the default 8080) for ELOG, then there is no need to enter the port number.

Give that a try -- that is working well for us.

Cheers!
Frank

 

> Dear experts, > > I am trying to use ELOG for my projects which we want to record every daily activities. > I have successful installed the ELOG to the computer (Windows10 -64 bit). > However, I don't know how to make it public or online, that people can access it from their computers. > I am a very newer to the ELOG. > Could you help me on it, please? > > Best regards, > Hien.

  69360   Fri Apr 30 20:29:45 2021 Reply Frank Baptistacaffeinejazz@gmail.comQuestionWindowsV3.1.3-fd7f1e2Re: Real-time mirroring?

Hi Sebatian,

Thank you for taking the time to answer...very much appreciated!

Although I'm running Windows OS, I do understand your approach, and will work on an analogous solution.

Our setup is interesting -- we're running many temperature chambers, each one having a dedicated computer running a unique instance of ELOG, each of which is regularly updated to let users know what the progress is for the lengthy temperature testing.  All of these individual logbooks regularly synchronize to a common 'mirror' ELOG server, which shows all the logbooks in one location.  Users can view all the logbooks on one screen, by connecting to the mirror server.  Since this can be done remotely, it also makes it convenient to add "updates" remotely to the mirror server, which eventually synchronizes with each individual computer at the temperature chambers.  As you might imagine, if there is a user doing an update at the temperature chamber computer while another user enters an update remotely to the mirror server, there is a chance of having a record conflict.

I was trying to avoid conflicts by having real-time mirroring, where a change on either end is detected and immediately "synchronized", thereby reducing or eliminating conflicts.

In any case, if I do come up with a good solution for Windows, I'll be sure to share what I did.

Cheers,
Frank

Sebastian Schenk wrote:

Hello Frank,

It seems, you are using the mirror function of elog. It should resolve conflicts by itself acording to the documented rules. (https://elog.psi.ch/elog/config.html)
As I don't use this function, I can't say how good it works.

If you don't want to use this function, I would suggest using the "Execute new | edit | delete" feature to trigger a script after each change of elog entries.
This script could itself run "rsync" or your sync solution to make the sync and
should afterwards call "killall -HUP elogd" on the remote to let elog re-read the config (and this sould also update the indices)
(see Server Configuration https://elog.psi.ch/elog/adminguide.html)

If you have a sync-solution, which itself permanently observes folders for changes and syncs it by itself,
It should have the option to run a command after sucessful sync or you need an other method to call "killall -HUP elogd" after sync.

Personally I would recommend the mirror function as it has a internal conflict resolution.
I hope this helps.

Best wishes,
Sebastian

PS: I don't know anything about your setup, but maybe there is a solution, where you don't need the local servers.
As I think, the mirror function is mainly for backup reasons of a main server to a secondary one or similar.

Frank Baptista wrote:

Hello!

We have a number of local ELOG servers, all mirrored to a single "remote" ELOG server.  We have users that create updates at the local server, and some at the remote server, which can run the risk of record conflicts.  Right now, the local servers perform a "Mirror cron" every 5 minutes, but even that leaves the door open to potential conflicts.

I found an open-source JAVA-based app called DirSync Pro (https://www.dirsyncpro.org/) which is capable of performing real-time mirroring, and has conflict handling.  I "took it for a spin", and it does do what it claims.  However, because each ELOG server performs record "indexing", it doesn't recognize records that aren't part of the current list of records. Restarting the ELOG server obviously corrects that, but I was wondering if there is another way to get the server to recognize newer "remotely-generated" records without restarting the server.

As always, I'm appreciative for the outstanding working that has been done to make ELOG the great application that it is!

 

 

 

 

  69362   Fri Apr 30 21:55:23 2021 Reply Frank Baptistacaffeinejazz@gmail.comQuestionWindowsV3.1.3-fd7f1e2Re: Real-time mirroring?

Hi Sebastian,

You're absolutely correct that the users at the chambers could directly use the remote ELOG server (without having a local server), and I did originally think about this.  Unfortunately, there are times that our network "goes down" (for maintenance and other issues), and it was important to maintain the users' ability to perform regular 'local' updates at the temperature chambers, regardless of the network status.

In our situation, having a remote server also became particularly useful in the event that the 'local' computer at a specific temperature chamber "went down".  The user can continue to update the respective logbook at the remoter server, knowing that it would eventually synchronize with the respective local server(s).

Thanks for the great feedback!
Frank

Sebastian Schenk wrote:

Hi Frank,

I am not sure, if I understood your setup correctly. But in my eyes, you don't need the local elog servers. The only difference for the users at the chambers would be to directly use the 'mirror' remote elog url instead of the local elog url in their browsers. "which is regularly updated..." could mean, that you are using some kind of automatism to add entries to the local elogs, but you could also use these directly on the remote 

If you have concers about users editing the wrong chamber elog, there is a usermanagement to only allow certain users to certain elogs (on the remote).

As for the part "having a record conflict". That would be totally fine and handled by the mirror function.
See the part "If new entries exist locally and remotely having the same entry ID"... in the documentation of the function.

As you state, that you are working on windows. There is no "killall" command to send the signal, as far as i know.
Then a script could kill the elog and start it again. But this should have the disadvantage of loosing the login session of the users.

Best wishes,
Sebastian

Frank Baptista wrote:

Hi Sebatian,

Thank you for taking the time to answer...very much appreciated!

Although I'm running Windows OS, I do understand your approach, and will work on an analogous solution.

Our setup is interesting -- we're running many temperature chambers, each one having a dedicated computer running a unique instance of ELOG, each of which is regularly updated to let users know what the progress is for the lengthy temperature testing.  All of these individual logbooks regularly synchronize to a common 'mirror' ELOG server, which shows all the logbooks in one location.  Users can view all the logbooks on one screen, by connecting to the mirror server.  Since this can be done remotely, it also makes it convenient to add "updates" remotely to the mirror server, which eventually synchronizes with each individual computer at the temperature chambers.  As you might imagine, if there is a user doing an update at the temperature chamber computer while another user enters an update remotely to the mirror server, there is a chance of having a record conflict.

I was trying to avoid conflicts by having real-time mirroring, where a change on either end is detected and immediately "synchronized", thereby reducing or eliminating conflicts.

In any case, if I do come up with a good solution for Windows, I'll be sure to share what I did.

Cheers,
Frank

Sebastian Schenk wrote:

Hello Frank,

It seems, you are using the mirror function of elog. It should resolve conflicts by itself acording to the documented rules. (https://elog.psi.ch/elog/config.html)
As I don't use this function, I can't say how good it works.

If you don't want to use this function, I would suggest using the "Execute new | edit | delete" feature to trigger a script after each change of elog entries.
This script could itself run "rsync" or your sync solution to make the sync and
should afterwards call "killall -HUP elogd" on the remote to let elog re-read the config (and this sould also update the indices)
(see Server Configuration https://elog.psi.ch/elog/adminguide.html)

If you have a sync-solution, which itself permanently observes folders for changes and syncs it by itself,
It should have the option to run a command after sucessful sync or you need an other method to call "killall -HUP elogd" after sync.

Personally I would recommend the mirror function as it has a internal conflict resolution.
I hope this helps.

Best wishes,
Sebastian

PS: I don't know anything about your setup, but maybe there is a solution, where you don't need the local servers.
As I think, the mirror function is mainly for backup reasons of a main server to a secondary one or similar.

Frank Baptista wrote:

Hello!

We have a number of local ELOG servers, all mirrored to a single "remote" ELOG server.  We have users that create updates at the local server, and some at the remote server, which can run the risk of record conflicts.  Right now, the local servers perform a "Mirror cron" every 5 minutes, but even that leaves the door open to potential conflicts.

I found an open-source JAVA-based app called DirSync Pro (https://www.dirsyncpro.org/) which is capable of performing real-time mirroring, and has conflict handling.  I "took it for a spin", and it does do what it claims.  However, because each ELOG server performs record "indexing", it doesn't recognize records that aren't part of the current list of records. Restarting the ELOG server obviously corrects that, but I was wondering if there is another way to get the server to recognize newer "remotely-generated" records without restarting the server.

As always, I'm appreciative for the outstanding working that has been done to make ELOG the great application that it is!

 

 

 

 

 

 

ELOG V3.1.5-2eba886