<div dir="ltr">Hi all<div><br></div><div>For the benefit of anybody who encounters the same problem, I solved it by creating a simple PHP script to act as a mostly transparent relay but returning a blank image for any failure.</div><div><br></div><div>Here's a bit of code:</div><div><br></div><div><br></div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div><div><font face="courier new, monospace"><?php</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">$g = $_SERVER['REQUEST_URI'];</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">$p = explode('?',$g,2);</font></div><div><font face="courier new, monospace">if (count($p) == 1) $p[] = '';</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">$url = '<a href="http://my.wms.server/WMS-service.cgi">http://my.wms.server/WMS-service.cgi</a>?' . $p[1];</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">$ch = curl_init($url);</font></div><div><font face="courier new, monospace">curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);</font></div><div><font face="courier new, monospace">$r=curl_exec($ch);</font></div><div><font face="courier new, monospace">$i = curl_getinfo($ch);</font></div><div><font face="courier new, monospace">curl_close($ch);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">$code = $i['http_code'];</font></div><div><font face="courier new, monospace">$ct = $i['content_type'];</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">$hasimg = false;</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">$is500 = ($code == 500);</font></div><div><font face="courier new, monospace">$isException = ($ct == 'application/vnd.ogc.se_xml' && strpos($r,'<!DOCTYPE ServiceExceptionReport') !== FALSE);</font></div><div><font face="courier new, monospace">if ($is500 || $isException</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">    </span>&& isset($_GET['width'])</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">  </span>&& isset($_GET['height'])) {</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">    </span>$a = imagecreate($_GET['width'],$_GET['height']);</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre"> </span>imagecolorallocate($a, 100, 0, $isException ? 100 : 0);</font></div><div><span class="" style="white-space:pre"><font face="courier new, monospace">   </font></span></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">  </span>$code = 200;</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">      </span>$ct = 'image/png';</font></div><div><font face="courier new, monospace"><span class="" style="white-space:pre">        </span>$hasimg = true;</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">}</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">http_response_code($code);</font></div><div><font face="courier new, monospace">header('Content-Type: ' . $ct);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">if ($hasimg) imagepng($a);</font></div><div><font face="courier new, monospace">else die($r);</font></div></div></blockquote></div><div><br></div><div>You'll have to tweak it a bit, at the very minimum setting the URL to the correct URL of the service. Then place it somewhere where it can be accessed (in a local webserver would be ideal) and point MapProxy to the PHP file.</div><div><br></div><div>This uses cURL to pass the request to the desired server but detects two possible failure outcomes - a 500 code (Internal Server Error) and an exception report (once I got rid of the 500 errors, these started popping up and halting the seeding). If any of these situations is detected and width&height are passed in the request, it returns an empty PNG image - red for 500, purple for exceptions. (If you aren't requesting PNGs, modify the code accordingly).</div><div><br></div><div>It's kind of an ugly hack, but it has allowed me to complete seeding, which was the entire point :) It also prevents MapProxy from requesting the damaged tiles from the WMS service time an again, which is desirable if the errors can be assumed to be permanent.</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2014-09-23 16:55 GMT+02:00 Oliver Tonnhofer <span dir="ltr"><<a href="mailto:olt@omniscale.de" target="_blank">olt@omniscale.de</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<span class=""><br>
On 23.09.2014, at 14:12, José M López-Cepero wrote:<br>
> What I would need (other than the server to behave itself, of course) is a way to make mapproxy-seed skip those 500 errors, but continue with the next tiles instead of dying. As far as I have been able to tell, there is no configuration option I can change for that, and while I guess that it should be a easy hack I don't know nearly enough Python to know where to look. I'm using MapProxy 1.7.1, installed as described in the Installation section of the docs (ie. in an independent virtual environment).<br>
<br>
</span>Sorry, there is no option to enable that.<br>
<br>
Regards,<br>
Oliver<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
Oliver Tonnhofer  | Omniscale GmbH & Co KG  | <a href="http://omniscale.com" target="_blank">http://omniscale.com</a><br>
OpenStreetMap WMS and tile services         | <a href="http://maps.omniscale.com" target="_blank">http://maps.omniscale.com</a><br>
<br>
<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br>J. M. López-Cepero
</div>