Hi!
Based on Glynn Foster's IRC request I hacked-up a small experiment/toy
(see attached script shtwitter.ksh, the file needs Solaris 11 = B72
since it depends on the networking capabilities of the new korn shell)
which allows to post messages to a twitter.com blog. twitter is some
kind of microblogging site, e.g. you can post one-liners up to 140
characters to a page, similar to a syslog.
The similarity with a syslog quickly leads to a simple usage idea - send
the contents of /var/adm/messages to a twitter blog like (see
http://twitter.com/syslog_sxb72x86 for an example (WARNING: This is not
recommended since the log may contain passwords by accident))
$ (export SHTWITTER_USER=account_username
SHTWITTER_PASSWD=account_password ; tail -f /var/adm/messages |
while read i ; do ksh93 shtwitter.ksh blog $i ; done)
Does anyone have better ideas how such a thing could be utilised (maybe
to monitor SMF state changes ?) ?
Bye,
Roland
--
__ . . __
(o.\ \/ /.o) [EMAIL PROTECTED]
\__\/\/__/ MPEG specialist, CJAVASunUnix programmer
/O /==\ O\ TEL +49 641 7950090
(;O/ \/ \O;)#!/bin/ksh93
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the License).
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets [] replaced with your own identifying
# information: Portions Copyright [] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident %Z%%M% %I% %E% SMI
#
# Solaris needs /usr/xpg4/bin/ because the tools in /usr/bin are not
POSIX-conformant
export PATH=/usr/xpg4/bin:/bin:/usr/bin
# Make sure all math stuff runs in the C locale to avoid problems with
alternative
# radix point representations (e.g. ',' instead of '.' in de_DE.*-locales). This
# needs to be set _before_ any floating-point constants are defined in this
script)
if [[ ${LC_ALL} != ]] ; then
export \
LC_MONETARY=${LC_ALL} \
LC_MESSAGES=${LC_ALL} \
LC_COLLATE=${LC_ALL} \
LC_CTYPE=${LC_ALL}
unset LC_ALL
fi
export LC_NUMERIC=C
function fatal_error
{
print -u 2 ${progname}: $@
exit 1
}
function encode_x_www_form_urlencoded
{
#set -o xtrace
nameref formdata=$1
nameref content=${1}.content # ToDO: should be
|content=formdata.content|
integer numformelements=${#formdata.form[*]}
integer i j
content=
for (( i=0 ; i numformelements ; i++ )) ; do
nameref element=${1}.form[${i}] # ToDo: should be
|element=formdata.form[${i}]|
typeset data=${element.data}
integer datalen=${#data}
typeset c
[[ $content != ]] content+=
content+=${element.name}=
for ((j=0 ; j datalen ; j++)) ; do
c=${data:j:1}
case $c in
' ') c=+ ;;
'!') c=%21 ;;
'*') c=%2A ;;
') c=%27 ;;
'(') c=%28 ;;
')') c=%29 ;;
';') c=%3B ;;
':') c=%3A ;;
'@') c=%40 ;;
'') c=%26 ;;
'=') c=%3D ;;
'+') c=%2B ;;
'$') c=%24 ;;
',') c=%2C ;;
'/') c=%2F ;;
'?') c=%3F ;;
'%') c=%25 ;;
'#') c=%23 ;;
'[') c=%5B ;;
']') c=%5D ;;
*) ;;
esac
content+=$c
done
done
formdata.content_length=${#content}
return 0
}
# parse return code, cookies etc.
function parse_http_response
{
nameref response=$1
typeset h c i
IFS=$' \t' read -r h c # read HTTP/1.[01] code
[[ $h != ~(Eil)HTTP/.* ]] { print -u2 $0: HTTP/ header missing ;
return 1 ; }
response.httpcode=$c
# skip remaining headers
while IFS='' read -r i ; do
[[ $i = $'\r' ]] break
done
return 0
}
function encode_http_basic_auth
{
typeset user=$1
typeset passwd=$2
typeset s
integer s_len
typeset -b base64var
# ksh93 binary variables use base64 encoding, the same as the
# HTTP basic authentification. We only have to read the
# plaintext user:passwd string into the binary variable base64var
# and then print this variable as ASCII.
s=${user}:${passwd}
s_len=${#s}
print -n ${s} | read -N${s_len} base64var
print --