Commit e5780d0f41dc8dfcab631895dad3ab5fe8cdb85c
1 parent
8f0de605
- egy log bejegyzés javítása
Showing
1 changed file
with
95 additions
and
58 deletions
Show diff stats
Vrh.Web.Reporting/HangfireBootstrapper.cs
| @@ -117,7 +117,7 @@ namespace Vrh.Web.HangfireBootstrapperNS | @@ -117,7 +117,7 @@ namespace Vrh.Web.HangfireBootstrapperNS | ||
| 117 | foreach (var ei in externalinitializerList) | 117 | foreach (var ei in externalinitializerList) |
| 118 | { | 118 | { |
| 119 | var externalinitializername = $"External initializer: {ei.Method.DeclaringType.FullName}.{ei.Method.Name}()"; | 119 | var externalinitializername = $"External initializer: {ei.Method.DeclaringType.FullName}.{ei.Method.Name}()"; |
| 120 | - try { ei.Invoke(HangfireBootstrapper.Instance._backgroundJobServer); le.AddDataField($"{externalinitializername} SUCCESS",$"{counter}of{numofall})"); } | 120 | + try { ei.Invoke(HangfireBootstrapper.Instance._backgroundJobServer); le.AddDataField($"{externalinitializername} SUCCESS",$"{counter}of{numofall}"); } |
| 121 | catch (Exception ex) { le.AddDataField($"{externalinitializername} EXCEPTION", ex.Message); } | 121 | catch (Exception ex) { le.AddDataField($"{externalinitializername} EXCEPTION", ex.Message); } |
| 122 | counter++; | 122 | counter++; |
| 123 | } | 123 | } |
| @@ -210,23 +210,6 @@ namespace Vrh.Web.HangfireBootstrapperNS | @@ -210,23 +210,6 @@ namespace Vrh.Web.HangfireBootstrapperNS | ||
| 210 | const string CONFIGFILENAME = @"applicationHost.config"; | 210 | const string CONFIGFILENAME = @"applicationHost.config"; |
| 211 | //const string FILEPATH = @"C:\temp\applicationHost.config"; | 211 | //const string FILEPATH = @"C:\temp\applicationHost.config"; |
| 212 | 212 | ||
| 213 | - const string SYSTEMAPPLICATIONHOST_ELEMENT = "system.applicationHost"; | ||
| 214 | - const string APPLICATIONPOOLS_ELEMENT = "applicationPools"; | ||
| 215 | - const string SITES_ELEMENT = "sites"; | ||
| 216 | - const string SERVICEAUTOSTARTPROVIDERS_ELEMENT = "serviceAutoStartProviders"; | ||
| 217 | - const string SITE_ELEMENT = "site"; | ||
| 218 | - const string APPLICATION_ELEMENT = "application"; | ||
| 219 | - const string ADD_ELEMENT = "add"; | ||
| 220 | - const string NAME_ATTRIBUTE = "name"; | ||
| 221 | - const string TYPE_ATTRIBUTE = "type"; | ||
| 222 | - const string SERVICEAUTOSTARTENABLED_ATTRIBUTE = "serviceAutoStartEnabled"; | ||
| 223 | - const string SERVICEAUTOSTARTPROVIDER_ATTRIBUTE = "serviceAutoStartProvider"; | ||
| 224 | - const string APPLICATIONPOOL_ATTRIBUTE = "applicationPool"; | ||
| 225 | - const string PATH_ATTRIBUTE = "path"; | ||
| 226 | - const string AUTOSTART_ATTRIBUTE = "autoStart"; | ||
| 227 | - const string STARTMODE_ATTRIBUTE = "startMode"; | ||
| 228 | - const string PRELOADENABLED_ATTRIBUTE = "preloadEnabled"; | ||
| 229 | - | ||
| 230 | bool writele = le == null; | 213 | bool writele = le == null; |
| 231 | if (le == null) { le = new DCLogEntry(LogLevel.Information, $"{typeof(HangfireBootstrapper).FullName}.{System.Reflection.MethodBase.GetCurrentMethod().Name}"); }; | 214 | if (le == null) { le = new DCLogEntry(LogLevel.Information, $"{typeof(HangfireBootstrapper).FullName}.{System.Reflection.MethodBase.GetCurrentMethod().Name}"); }; |
| 232 | try | 215 | try |
| @@ -238,9 +221,6 @@ namespace Vrh.Web.HangfireBootstrapperNS | @@ -238,9 +221,6 @@ namespace Vrh.Web.HangfireBootstrapperNS | ||
| 238 | string serviceAutoStartProviderTypeFullName = serviceAutoStartProviderType.FullName; | 221 | string serviceAutoStartProviderTypeFullName = serviceAutoStartProviderType.FullName; |
| 239 | string serviceAutoStartProviderAssassemblyName = serviceAutoStartProviderType.Assembly.GetName().Name; | 222 | string serviceAutoStartProviderAssassemblyName = serviceAutoStartProviderType.Assembly.GetName().Name; |
| 240 | string configfilepath = Path.Combine(NativeSystemPath, CONFIGFILEDIRECTORY, CONFIGFILENAME); | 223 | string configfilepath = Path.Combine(NativeSystemPath, CONFIGFILEDIRECTORY, CONFIGFILENAME); |
| 241 | - var filecontent = System.IO.File.ReadAllText(configfilepath); | ||
| 242 | - XElement configxml = XElement.Parse(filecontent, LoadOptions.PreserveWhitespace); //XElement.Load(configfilepath); | ||
| 243 | - XElement myconfigrootxml = configxml.Element(XName.Get(SYSTEMAPPLICATIONHOST_ELEMENT)); | ||
| 244 | 224 | ||
| 245 | le.AddDataField("SetupAutoStart configfilepath", configfilepath); | 225 | le.AddDataField("SetupAutoStart configfilepath", configfilepath); |
| 246 | le.AddDataField("SetupAutoStart applicationpoolname", applicationpoolname); | 226 | le.AddDataField("SetupAutoStart applicationpoolname", applicationpoolname); |
| @@ -251,50 +231,107 @@ namespace Vrh.Web.HangfireBootstrapperNS | @@ -251,50 +231,107 @@ namespace Vrh.Web.HangfireBootstrapperNS | ||
| 251 | le.AddDataField("SetupAutoStart serviceAutoStartProviderTypeFullName", serviceAutoStartProviderTypeFullName); | 231 | le.AddDataField("SetupAutoStart serviceAutoStartProviderTypeFullName", serviceAutoStartProviderTypeFullName); |
| 252 | le.AddDataField("SetupAutoStart serviceAutoStartProviderAssassemblyName", serviceAutoStartProviderAssassemblyName); | 232 | le.AddDataField("SetupAutoStart serviceAutoStartProviderAssassemblyName", serviceAutoStartProviderAssassemblyName); |
| 253 | 233 | ||
| 254 | - XElement myapplicationpooladdelement = myconfigrootxml?.Element(XName.Get(APPLICATIONPOOLS_ELEMENT))? | ||
| 255 | - .Elements(XName.Get(ADD_ELEMENT))?.FirstOrDefault(e => e.Attribute(XName.Get(NAME_ATTRIBUTE)).Value == applicationpoolname); | ||
| 256 | - XElement mysiteapplicationelement = myconfigrootxml?.Element(XName.Get(SITES_ELEMENT))? | ||
| 257 | - .Elements(XName.Get(SITE_ELEMENT))?.FirstOrDefault(e => e.Attribute(XName.Get(NAME_ATTRIBUTE)).Value == websitename) | ||
| 258 | - .Elements(XName.Get(APPLICATION_ELEMENT))?.FirstOrDefault(e => e.Attribute(XName.Get(PATH_ATTRIBUTE)).Value == webapplicationname && e.Attribute(XName.Get(APPLICATIONPOOL_ATTRIBUTE)).Value == applicationpoolname); | ||
| 259 | - if (myapplicationpooladdelement == null) return; | ||
| 260 | - if (mysiteapplicationelement == null) return; | ||
| 261 | - | ||
| 262 | - bool configchanged=false; | ||
| 263 | - if (disablemode) | ||
| 264 | - { | ||
| 265 | - configchanged = SetOrAddAttribute(AUTOSTART_ATTRIBUTE, myapplicationpooladdelement, bool.FalseString.ToLower()) || configchanged; | ||
| 266 | - configchanged = SetOrAddAttribute(STARTMODE_ATTRIBUTE, myapplicationpooladdelement, StartMode.OnDemand.ToString()) || configchanged; | ||
| 267 | - configchanged = SetOrAddAttribute(SERVICEAUTOSTARTENABLED_ATTRIBUTE, mysiteapplicationelement, bool.FalseString.ToLower()) || configchanged; | ||
| 268 | - configchanged = SetOrAddAttribute(PRELOADENABLED_ATTRIBUTE, mysiteapplicationelement, bool.FalseString.ToLower()) || configchanged; | ||
| 269 | - configchanged = RemoveAttribute(SERVICEAUTOSTARTPROVIDER_ATTRIBUTE, mysiteapplicationelement) || configchanged; | ||
| 270 | - | ||
| 271 | - XElement myautostartproviderselement = myconfigrootxml.Element(XName.Get(SERVICEAUTOSTARTPROVIDERS_ELEMENT)); | ||
| 272 | - configchanged = RemoveElementWithSelectorAttribute(ADD_ELEMENT, myautostartproviderselement, NAME_ATTRIBUTE, autostartprovidername,removecontainerifnochild:true) || configchanged; | ||
| 273 | - } | ||
| 274 | - else | 234 | + string filecontent; |
| 235 | + bool configchanged; | ||
| 236 | + lock (lockerFile) | ||
| 275 | { | 237 | { |
| 276 | - configchanged = SetOrAddAttribute(AUTOSTART_ATTRIBUTE, myapplicationpooladdelement, bool.TrueString.ToLower()) || configchanged; | ||
| 277 | - configchanged = SetOrAddAttribute(STARTMODE_ATTRIBUTE, myapplicationpooladdelement, StartMode.AlwaysRunning.ToString()) || configchanged; | ||
| 278 | - configchanged = SetOrAddAttribute(SERVICEAUTOSTARTENABLED_ATTRIBUTE, mysiteapplicationelement, bool.TrueString.ToLower()) || configchanged; | ||
| 279 | - configchanged = SetOrAddAttribute(PRELOADENABLED_ATTRIBUTE, mysiteapplicationelement, bool.TrueString.ToLower()) || configchanged; | ||
| 280 | - configchanged = SetOrAddAttribute(SERVICEAUTOSTARTPROVIDER_ATTRIBUTE, mysiteapplicationelement, autostartprovidername) || configchanged; | 238 | + bool usefilestream = false; |
| 239 | + if (usefilestream) | ||
| 240 | + { | ||
| 241 | + FileStream file=null; StreamReader reader = null; StreamWriter writer = null; | ||
| 242 | + try | ||
| 243 | + { | ||
| 244 | + int opentriescounter = 0; | ||
| 245 | + while (true) | ||
| 246 | + { | ||
| 247 | + try { file = new FileStream(configfilepath, FileMode.Open, FileAccess.ReadWrite, FileShare.None); break; } | ||
| 248 | + catch | ||
| 249 | + { | ||
| 250 | + if (opentriescounter++ > 5) throw new Exception("ERROR! in accessing config file. Maybe it is open in other application!"); | ||
| 251 | + Thread.Sleep(20); | ||
| 252 | + } | ||
| 253 | + } | ||
| 281 | 254 | ||
| 282 | - configchanged = SetOrAddElement(SERVICEAUTOSTARTPROVIDERS_ELEMENT, myconfigrootxml, "", out XElement myautostartproviderselement) || configchanged; | ||
| 283 | - configchanged = SetOrAddElementWithSelectorAttribute(ADD_ELEMENT, myautostartproviderselement, NAME_ATTRIBUTE, autostartprovidername, "", out XElement myautostartprovideraddelement) || configchanged; | ||
| 284 | - configchanged = SetOrAddAttribute(TYPE_ATTRIBUTE, myautostartprovideraddelement, $"{serviceAutoStartProviderTypeFullName},{serviceAutoStartProviderAssassemblyName }") || configchanged; | ||
| 285 | - } | ||
| 286 | - | ||
| 287 | - if (configchanged) | ||
| 288 | - { | ||
| 289 | - //configxml.Save(configfilepath); | ||
| 290 | - System.IO.File.WriteAllText(configfilepath, configxml.ToString()); | 255 | + reader = new StreamReader(file, Encoding.ASCII); |
| 256 | + filecontent = ProcessFileContent(le, reader.ReadToEnd(), applicationpoolname, websitename, webapplicationname, autostartprovidername, serviceAutoStartProviderAssassemblyName, serviceAutoStartProviderTypeFullName, disablemode); | ||
| 257 | + configchanged = filecontent != null; | ||
| 258 | + if (configchanged) | ||
| 259 | + { | ||
| 260 | + writer = new StreamWriter(file, Encoding.ASCII); | ||
| 261 | + writer.Write(filecontent); | ||
| 262 | + } | ||
| 263 | + } | ||
| 264 | + finally { try { writer?.Dispose(); } catch { } try { reader?.Dispose();} catch { } try { file?.Dispose(); } catch { } } | ||
| 265 | + } | ||
| 266 | + else | ||
| 267 | + { | ||
| 268 | + filecontent = ProcessFileContent(le, System.IO.File.ReadAllText(configfilepath), applicationpoolname, websitename, webapplicationname, autostartprovidername, serviceAutoStartProviderAssassemblyName, serviceAutoStartProviderTypeFullName, disablemode); | ||
| 269 | + configchanged = filecontent != null; | ||
| 270 | + if (configchanged) System.IO.File.WriteAllText(configfilepath, filecontent); | ||
| 271 | + } | ||
| 291 | } | 272 | } |
| 292 | string modetxt = disablemode ? "DISABLED" : "ENABLED"; | 273 | string modetxt = disablemode ? "DISABLED" : "ENABLED"; |
| 293 | - le.AddSuccessResult("SetupAutoStart " + (configchanged ? $"SUCCESSFULLY {modetxt}" : $"NO CHANGE, ALREADY {modetxt}")); | 274 | + le.AddDataField("SetupAutoStart SUCCESS RESULT",configchanged ? modetxt : $"NO CHANGE, ALREADY {modetxt}"); |
| 294 | } | 275 | } |
| 295 | - catch (Exception ex) { le.AddExceptionResult(ex); le.SetLogLevel(LogLevel.Error); return; } | 276 | + catch (Exception ex) { le.AddDataField("SetupAutoStart EXCEPTION",ex.Message); le.SetLogLevel(LogLevel.Error); return; } |
| 296 | finally { if (writele) le.Write(); } | 277 | finally { if (writele) le.Write(); } |
| 297 | } | 278 | } |
| 279 | + private static string ProcessFileContent(DCLogEntry le, string filecontent,string applicationpoolname,string websitename,string webapplicationname,string autostartprovidername,string serviceAutoStartProviderAssassemblyName, string serviceAutoStartProviderTypeFullName,bool disablemode) | ||
| 280 | + { | ||
| 281 | + const string SYSTEMAPPLICATIONHOST_ELEMENT = "system.applicationHost"; | ||
| 282 | + const string APPLICATIONPOOLS_ELEMENT = "applicationPools"; | ||
| 283 | + const string SITES_ELEMENT = "sites"; | ||
| 284 | + const string SERVICEAUTOSTARTPROVIDERS_ELEMENT = "serviceAutoStartProviders"; | ||
| 285 | + const string SITE_ELEMENT = "site"; | ||
| 286 | + const string APPLICATION_ELEMENT = "application"; | ||
| 287 | + const string ADD_ELEMENT = "add"; | ||
| 288 | + const string NAME_ATTRIBUTE = "name"; | ||
| 289 | + const string TYPE_ATTRIBUTE = "type"; | ||
| 290 | + const string SERVICEAUTOSTARTENABLED_ATTRIBUTE = "serviceAutoStartEnabled"; | ||
| 291 | + const string SERVICEAUTOSTARTPROVIDER_ATTRIBUTE = "serviceAutoStartProvider"; | ||
| 292 | + const string APPLICATIONPOOL_ATTRIBUTE = "applicationPool"; | ||
| 293 | + const string PATH_ATTRIBUTE = "path"; | ||
| 294 | + const string AUTOSTART_ATTRIBUTE = "autoStart"; | ||
| 295 | + const string STARTMODE_ATTRIBUTE = "startMode"; | ||
| 296 | + const string PRELOADENABLED_ATTRIBUTE = "preloadEnabled"; | ||
| 297 | + | ||
| 298 | + XElement configxml = XElement.Parse(filecontent, LoadOptions.PreserveWhitespace); | ||
| 299 | + XElement myconfigrootxml = configxml.Element(XName.Get(SYSTEMAPPLICATIONHOST_ELEMENT)); | ||
| 300 | + | ||
| 301 | + XElement myapplicationpooladdelement = myconfigrootxml?.Element(XName.Get(APPLICATIONPOOLS_ELEMENT))? | ||
| 302 | + .Elements(XName.Get(ADD_ELEMENT))?.FirstOrDefault(e => e.Attribute(XName.Get(NAME_ATTRIBUTE)).Value == applicationpoolname); | ||
| 303 | + XElement mysiteapplicationelement = myconfigrootxml?.Element(XName.Get(SITES_ELEMENT))? | ||
| 304 | + .Elements(XName.Get(SITE_ELEMENT))?.FirstOrDefault(e => e.Attribute(XName.Get(NAME_ATTRIBUTE)).Value == websitename) | ||
| 305 | + .Elements(XName.Get(APPLICATION_ELEMENT))?.FirstOrDefault(e => e.Attribute(XName.Get(PATH_ATTRIBUTE)).Value == webapplicationname && e.Attribute(XName.Get(APPLICATIONPOOL_ATTRIBUTE)).Value == applicationpoolname); | ||
| 306 | + if (myapplicationpooladdelement == null || mysiteapplicationelement == null) return null; | ||
| 307 | + | ||
| 308 | + bool configchanged = false; | ||
| 309 | + if (disablemode) | ||
| 310 | + { | ||
| 311 | + configchanged = SetOrAddAttribute(AUTOSTART_ATTRIBUTE, myapplicationpooladdelement, bool.FalseString.ToLower()) || configchanged; | ||
| 312 | + configchanged = SetOrAddAttribute(STARTMODE_ATTRIBUTE, myapplicationpooladdelement, StartMode.OnDemand.ToString()) || configchanged; | ||
| 313 | + configchanged = SetOrAddAttribute(SERVICEAUTOSTARTENABLED_ATTRIBUTE, mysiteapplicationelement, bool.FalseString.ToLower()) || configchanged; | ||
| 314 | + configchanged = SetOrAddAttribute(PRELOADENABLED_ATTRIBUTE, mysiteapplicationelement, bool.FalseString.ToLower()) || configchanged; | ||
| 315 | + configchanged = RemoveAttribute(SERVICEAUTOSTARTPROVIDER_ATTRIBUTE, mysiteapplicationelement) || configchanged; | ||
| 316 | + | ||
| 317 | + XElement myautostartproviderselement = myconfigrootxml.Element(XName.Get(SERVICEAUTOSTARTPROVIDERS_ELEMENT)); | ||
| 318 | + configchanged = RemoveElementWithSelectorAttribute(ADD_ELEMENT, myautostartproviderselement, NAME_ATTRIBUTE, autostartprovidername, removecontainerifnochild: true) || configchanged; | ||
| 319 | + } | ||
| 320 | + else | ||
| 321 | + { | ||
| 322 | + configchanged = SetOrAddAttribute(AUTOSTART_ATTRIBUTE, myapplicationpooladdelement, bool.TrueString.ToLower()) || configchanged; | ||
| 323 | + configchanged = SetOrAddAttribute(STARTMODE_ATTRIBUTE, myapplicationpooladdelement, StartMode.AlwaysRunning.ToString()) || configchanged; | ||
| 324 | + configchanged = SetOrAddAttribute(SERVICEAUTOSTARTENABLED_ATTRIBUTE, mysiteapplicationelement, bool.TrueString.ToLower()) || configchanged; | ||
| 325 | + configchanged = SetOrAddAttribute(PRELOADENABLED_ATTRIBUTE, mysiteapplicationelement, bool.TrueString.ToLower()) || configchanged; | ||
| 326 | + configchanged = SetOrAddAttribute(SERVICEAUTOSTARTPROVIDER_ATTRIBUTE, mysiteapplicationelement, autostartprovidername) || configchanged; | ||
| 327 | + | ||
| 328 | + configchanged = SetOrAddElement(SERVICEAUTOSTARTPROVIDERS_ELEMENT, myconfigrootxml, "", out XElement myautostartproviderselement) || configchanged; | ||
| 329 | + configchanged = SetOrAddElementWithSelectorAttribute(ADD_ELEMENT, myautostartproviderselement, NAME_ATTRIBUTE, autostartprovidername, "", out XElement myautostartprovideraddelement) || configchanged; | ||
| 330 | + configchanged = SetOrAddAttribute(TYPE_ATTRIBUTE, myautostartprovideraddelement, $"{serviceAutoStartProviderTypeFullName},{serviceAutoStartProviderAssassemblyName }") || configchanged; | ||
| 331 | + } | ||
| 332 | + return configxml.ToString(); | ||
| 333 | + } | ||
| 334 | + private static object lockerFile = new Object(); | ||
| 298 | private static bool RemoveAttribute(string attributetoremovename, XElement attrcontainer) | 335 | private static bool RemoveAttribute(string attributetoremovename, XElement attrcontainer) |
| 299 | { | 336 | { |
| 300 | XAttribute attr = attrcontainer.Attribute(XName.Get(attributetoremovename)); | 337 | XAttribute attr = attrcontainer.Attribute(XName.Get(attributetoremovename)); |