[squeak-dev] Instruments for headless images
Casey Ransberger
casey.obrien.r at gmail.com
Fri Jan 21 00:28:10 UTC 2011
A big +1 to all of this. VNC is a poor substitute for command line server management in some cases, and I think it would make Squeak a *much* easier sell to my operations people. I've been wishing for something like this.
On Jan 20, 2011, at 1:05 PM, Chris Muller <asqueaker at gmail.com> wrote:
> The Ma stack does something similar, although not crippling the system
> to the same extent.
>
> How do you determine you're running headless? I attached my
> implementation of #maIsHeadless for determining whether the VM was
> launched headless. Perhaps we should integrate this functionality
> into Squeak and Pharo (or a variant without the prefix, of course).
>
> Then, I use MaCommandLineProcessor which is concerned with handling
> the command-line Squeak was launched with:
>
> Then, I write my .st scripts like:
>
> MaCommandLineProcessor do:
> [ : arg1 : arg2 : arg3 : etc |
> "my batch code script..."
> "args come in as Strings."
> "... you can have a variable number of args." ]
>
> as well as a uniform error-handler for all scripts, to redirect to
> stdout and stderr, thusly:
>
> MaCommandLineProcessor class>>#do: aBlock
> | stdOut stdErr |
> self ensureStartedUp.
> stdOut := StandardFileStream stdout.
> stdErr := StandardFileStream stderr.
> [ aBlock valueWithAllArguments: self args ]
> on: Notification , Warning
> do:
> [ : noti | stdOut
> nextPutAll: DateAndTime now asString ; space ;
> nextPutAll: noti description ;
> perform: MultiByteFileStream lineEndDefault.
> noti resume ]
> on: SyntaxErrorNotification
> do:
> [ : err | stdOut
> nextPutAll: err errorCode ;
> perform: MultiByteFileStream lineEndDefault.
> self haltOrQuit ]
> on: Error
> do:
> [ : err | stdErr
> nextPutAll: 'ERROR: ' ;
> nextPutAll: DateAndTime now asString ; space ;
> perform: MultiByteFileStream lineEndDefault ;
> nextPutAll: err description ;
> perform: MultiByteFileStream lineEndDefault.
> err isMaUserError ifFalse:
> [ stdErr nextPutAll:
> (err signalerContext longStack
> copyReplaceAll: Character cr asString
> with: (String perform: MultiByteFileStream lineEndDefault)) ].
> self haltOrQuit ]
>
> #haltOrQuit is where it checks #maIsHeadless to determine whether to
> halt or quit.
>
> MaCommandLineProcessor is part of "Ma base additions" package, so any
> of the "Ma" softwares (Magma, Maui, Ma client server, etc.) will have
> it. But I think it would be useful to put this (or, a variant)
> directly into a future Squeak.
>
> - Chris
>
>
> On Thu, Jan 20, 2011 at 2:39 PM, Igor Stasenko <siguctua at gmail.com> wrote:
>> Hello folks.
>>
>> I'd like to ask, if there any 'standartized' instruments for headless
>> images (or alike).
>>
>> I need a simple things:
>> - redirect all ToolSet/UIManager messages to Transcript
>> - redirect Transcript logging to file or stdout
>>
>> in short, these tools should serve a simple, yet important purpose:
>> - if image runs in headless mode, it should suppress anything which
>> expecting user interaction (like showing warnings with 'continue'
>> button) and either log such messages to file
>> or simply quit image with error message.
>>
>> Without such tool it is quite difficult to monitor, what happens with
>> your headless image.. unless you have RFB installed.. but that is
>> different and unrelated story.
>>
>>
>> I did a prototype once for Hydra (you can check it at
>> SqS/HydraVM/HydraVM.mcz package)
>> there are two subclasses:
>> - MorphicUIManager subclass: #HydraUIManager
>> - StandardToolSet subclass: #HydraDebugToolSet
>>
>> and
>> - WriteStream subclass: #HydraTranscript
>>
>> which can be installed as a Transcript.
>>
>> And in order to prepare image to run in headless mode, i issued:
>> ToolSet unregister: StandardToolSet.
>> ToolSet register: HydraDebugToolSet.
>> UIManager default: HydraUIManager new.
>>
>> Also, HydraTranscript
>> startUp does something like:
>>
>> TranscriptStream
>> newTranscript: (self basicNew initialize
>> on: (String new: 1000))
>>
>>
>> With that i could run the image in headless mode, knowing that in case
>> of error or warning etc, all will be redirected to transcript,
>> moreover i even stopped the UI process, so it never run on headless images.
>>
>> I wonder if there are other work, which can offer similar,
>> and is there any way to detect that image are running in headless mode?
>>
>>
>> --
>> Best regards,
>> Igor Stasenko AKA sig.
>>
>>
> <SmalltalkImage-maIsHeadless.st.gz>
>
More information about the Squeak-dev
mailing list
|