Thanks, @Alexey Maslov, fixed.
- Log in to post comments
Thanks, @Alexey Maslov, fixed.
Here's how to fix that.
1. Create Inbound adapter which extends default inbound adapter and exposes DeleteFromServer setting:
Class Test.InboundAdapter Extends EnsLib.File.InboundAdapter
{
Parameter SETTINGS = "DeleteFromServer:Basic";
}2. Create Passthrough Service, which uses your custom adapter:
Class Test.PassthroughService Extends EnsLib.File.PassthroughService
{
Parameter ADAPTER = "Test.InboundAdapter";
}3. Use your class (2) when you create a new BS, it will have DeleteFromServer property:
.png)
I filed an enhancement request, please use DP-422980 as an identifier if you would contact WRC on this topic.
Welcome back!
Recently I wrote a snippet to determine which Business Host took to long to stop:
Class Test.ProdStop
{
/// do ##class(Test.ProdStop).Try()
ClassMethod Try()
{
set production = ##class(Ens.Director).GetActiveProductionName()
set rs = ..EnabledFunc(production)
if rs.%SQLCODE && (rs.%SQLCODE '= 100) {
write $$$FormatText("Can't get enabled items in %1, SQLCode: %2, Message: %3", production, rs.%SQLCODE, rs.%Message)
quit
}
while rs.%Next() {
set bh = rs.Name
set start = $zh
set sc = ##class(Ens.Director).EnableConfigItem(bh, $$$NO, $$$YES)
set end = $zh
set duration = $fn(end-start,"",1)
write !, $$$FormatText("BH: %1, Stopped in: %2, sc: %3", bh, duration, $case($$$ISOK(sc), $$$YES:1, :$system.Status.GetErrorText(sc))), !
if duration>60 {
write !, $$$FormatText("!!!!!!! BH: %1 TOOK TOO lONG !!!!!!!", bh),!
}
}
}
Query Enabled(production) As %SQLQuery
{
SELECT
Name
, PoolSize
FROM Ens_Config.Item
WHERE 1=1
AND Production = :production
AND Enabled = 1
}
}It stops BHs one by one, measuring how long it took to stop each one.
I would recommend you try to determine which items are taking too long to stop.
Export production before running this code to avoid manually reenabling all the hosts.
set sda3 = ##class(HS.SDA3.Container).%New()
do sda3.InitializeXMLParse(.stream)
while sda3.GetNextSDA(.type, .obj) {
// process?
}Thanks! Fixed.
Are you on Mac by any chance?
Are you using default Apache on Windows?
Try to set ThreadsPerChild and ThreadLimit to 100 in <IRIS>\httpd\conf\httpd.conf and restart IRIS (or at least the webserver). After that 100 processes should be able to start (under appropriate load).
Check this article.
One of the most simple options - a CSP utility method which outputs all objects as a response. Just add this to any part of your code:
set %response.ContentType = "html" do ##class(%CSP.Utils).DisplayAllObjects() return $$$OK
Yes, either enable OS authentication for passwordless login or pass user/password as first two lines of the script.
Check Ens.Config package - it has all production elements as structured tables/classes.
I think it would be easier to write ndjson->json converter. Something like this:
ClassMethod nd2json(file, dir)
{
set dir = ##class(%File).NormalizeDirectory(dir)
quit:'##class(%File).Exists(file) $$$ERROR($$$GeneralError, "File " _ file _ " does not exist")
if '##class(%File).DirectoryExists(dir) {
do ##class(%File).CreateDirectoryChain(dir)
quit:'##class(%File).DirectoryExists(dir) $$$ERROR($$$GeneralError, "Directory " _ dir _ " does not exist and creation failed")
}
set stream = ##class(%Stream.FileCharacter).%New()
do stream.LinkToFile(file)
while 'stream.AtEnd {
set json = stream.ReadLine($$$MaxStringLength)
//set out = ##class(%File).TempFilename("json", dir) // random order
set out = dir _ $tr($j($i(count), 4), " ", 0) _ ".json" // if the order is important
set outStream = ##class(%Stream.FileCharacter).%New()
do outStream.LinkToFile(out)
do outStream.Write(json)
do outStream.%Save()
kill outStream
}
}Enabling OS authentication may be an option, but that's a global setting and not (easily) configurable per-user.
But is there a way to configure OS authentication for one user only?
Use caution with auto-play: Auto-playing GIFs can be distracting and annoying for some users, so use caution when deciding to have your GIFs auto-play. Consider giving users the option to play or pause the GIF.
I think that's only videos.
ISC's Interoperability business rule editor has some quirks; it does not allow the passing of variables by reference to custom methods
Interesting. Can you post sample code please?
Now, why isn't $ZOBJREF() in the documentation?
What's the use case for this function?
Here's some (autotranslated) info about thesefunctions.
Also $zobjref accepts only integers, so you can pass just the part before @:
set a={}
set b={}
set obj1=$zobjref(1)
set obj2=$zobjref("1@Sample.Person")
zwResults in:
a=<OBJECT REFERENCE>[1@%Library.DynamicObject]
b=<OBJECT REFERENCE>[2@%Library.DynamicObject]
obj1=<OBJECT REFERENCE>[1@%Library.DynamicObject]
obj2=<OBJECT REFERENCE>[1@%Library.DynamicObject]There's also no guarantee that the object would be the same i.e.:
set a={"a":1}
set b={"b":1}
set aoref = ""_ a
kill a
set c={"c":1}
set obja=$zobjref(aoref)
zw obja
> obja={"c":1} ; <DYNAMIC OBJECT>Do dynObject1.%Set("Stream", request.Stream, "stream")Depending on the fidelity you need, something like this would work:
set str = "abc def! xyz"
set punctuation = "'!""#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~"
set strNoPuncuation = $tr(str, punctuation, $j("", $l(punctuation)))
set strDedupeWhitespaces = $zstrip(strNoPuncuation,"<=>P")
set out = $lfs(strDedupeWhitespaces, " ")Another approach. Simpler and likely faster but it will merge sentence ends without whitespace afterwards:
set str = "abc def! xyz"
set strNoPuncuation = $zstrip(str,"*P",," ")
set strDedupeWhitespaces = $zstrip(strNoPuncuation,"<=>P")
set out = $lfs(strDedupeWhitespaces, " ")Check $translate, $zstrip.
If you want more fidelity/features check %iKnow.Stemming package.
Replace
Set tSC1 = tStream.Write(dynObject1.%ToJSON())with:
Do dynObject1.%ToJSON(tStream)I recommend you to check this article, but here's a summary:
1. Calculate a list of BHs which need a restart (not sure why you need regexp, all BHs are in Ens_Config.Item table):
SELECT %DLIST(Name) bhList
FROM Ens_Config.Item
WHERE 1=1
AND Enabled = 1
AND Production = :production
AND ClassName %INLIST :classList -- or some other condition2. Restart them all at once instead of one by one:
for stop = 1, 0 {
for i=1:1:$ll(bhList) {
set host = $lg(bhList, i)
set sc = ##class(Ens.Director).TempStopConfigItem(host, stop, 0)
}
set sc = ##class(Ens.Director).UpdateProduction()
}Why not map packages (also maybe use %ALL namespace to map to all namespaces at once)?
1. Do you need to restart several BHs at once or do you need to restart them one by one?
2. How long does it take currently and what's your goal timing-wise?
Good idea!
Invite a user to your tenant.
Check this utility.
Try adding:
--check-caps false
Calling @Robert.Kuszewski.
My JAVA_HOME is a is a JRE (C:\Program Files\Java\jre1.8.0_361) not a JDK if that matters?
No, it should not.
I can't seem to edit the External Language Servers in the management portal
Please stop it before editing. You also should be able to create a new External Language Server.
What's the Undefined config value on TEST and PROD:
zn "%SYS"
set sc=##Class(Config.Miscellaneous).Get(.p)
write p("Undefined")What's the response you're getting?
here I want to capture the error details in trace , log , that I can see in production web page
If you want to quit processiong, it's enough to either quit:
quit:$$$ISERR(sc) scOr raise an error (if you're several levels deep for example):
$$$TOE(sc, sc)If you don't want to interrupt processing, use $$$LOG macroes, for example:
$$$LOGWARNING($System.Status.GetErrorText(sc))This code would create a new Log entry of a warning type.