[2012/04/ - Version0.0.3 - [X]
E-dbportǉ
  DB̋N|[gԍ𓮓IɕύX


E-masterportǉ
  Setsuna𕡐NꍇɁAɋNĂSetsuna̓DB㔭ŋNSetsuna͗p
  邽߁ADB̋N|[gԍ-dbportŕύXĂꍇ̃IvVō킹ĂKvB


E-queryŎw肷SQLAdapter瓊ꂽ߂̃f[^Ƃėpł@\ǉ
  pC[WSQLAdapter̃f[^ŒuӏɃJ̃tH[}bg(%J%)
  w肷Ƃ̕SQLsɂ́AAdapter̒߂̃f[^ŒuĎsB
  1SQLłłw\B

  wyсAsC[W͈ȉƂȂ
   1.Adapterȉ̃f[^ꍇ
    Reply from 192.168.11.1: bytes=32 time=1ms TTL=64
   2.ɂ͈ȉ̃e[u`ŎIɊi[B
    DBe[ũf[^"J:f[^"̃tH[}bgňȉɕ\   
     COLUMN0:Reply
     COLUMN1:from
     COLUMN2:192.168.11.1:
     COLUMN3:bytes=32
     COLUMN4:time=1ms
     COLUMN5:TTL=64
   3.ȉSQLw(Where̎w̕%Column4%w
     -query "select * from pipe where to_number(column4) > to_number(%Column4%)"
   4.ۂɂ͈ȉSQLs
     select * from pipe where to_number(column4) > to_number('time=1ms')
   5.%Column4%̕ۂɂAdapter̃f[^'time=1ms'ɒuĂ


E-easyqueyǉ
  SQL𒼐ڋLqɊ֐ĂяoASQLł̊mFƓ̂ƂsB
  -queryƓw͕sƂȂB
  ݗp\Ȋ֐Ƃ̋@\͈ȉ
  IvVƂavg_overAavg_belowAover_valueAbelow_valueAtime_range_in_avg_overAtime_range_in_avg_belowAtime_range_in_value_multi_exist̊֐
    Ō̈ł'w̒l'͎Rɓ̃e[ũJ̒lɒuĎs\ƂȂĂ܂B
    ͏ɍŐV̒lKĎs邽߁Aʂ̃e[uɃp[^𓊓Ă΁A֐ɂ𓮓I
    ϓ邱ƂɂȂ܂B܂'avg_over'֐ł΁AJ̕ϒlʂ̃e[ûJ̍ŐVl
    傫΁ACxgŝ悤ȂƂ\łB
    w@'e[u:J'̃tH[}bgňɎw肵܂BŌ̎s̕ɂႪ̂ŁA킹
    QƂĂB
  [֐ꗗ]");
  'avg_over':̃e[u̓̃J̑SẴf[^̕ςwlȏォׂ
             IvVł̕\L= -easyquery "avg_over(ΏTable, ΏColumn, w̒l)"

  'avg_below':̃e[u̓̃J̕ςwlȉׂ
             IvVł̕\L= -easyquery "avg_below(ΏTable, ΏColumn, w̒l)"

  'over_value':̃e[u̓̃J̍őlwlȏォׂ
              IvVł̕\L= -easyquery "over_value(ΏTable, ΏColumn, w̒l)"

  'below_value':̃e[u̓̃J̍ŏlwlȉׂ
                IvVł̕\L= -easyquery "below_value(ΏTable, ΏColumn, w̒l)"

  'avg_more_over':̃e[u̓̃J̕ς̎w{ȏ̒l݂邩ׂ
                  IvVł̕\L= -easyquery "avg_more_over(ΏTable, ΏColumn, w̒l)"

  'last_time_avg_more_over':̃e[u̓̃J̒ߓbȓ̃f[^̕ϒl{ȏ㒴f[^邩ׂ
                            IvVł̕\L= -easyquery "last_time_avg_more_over(ΏTable, ΏColumn, ߂̓b, {)"

  'count_last_time_avg_more_over':L̏̃f[^茏ȏ゠
                                  IvVł̕\L= -easyquery "count_last_time_avg_more_over(ΏTable, ΏColumn, ߂̓b, {, 茏)"

  'time_range_in_avg_over':߂̉ߋwlbԂ̓̃e[u̓J̕ϒlwlȏł
                           IvVł̕\L= -easyquery "time_range_in_avg_over(ΏTable, ΏColumn, ߂ߋwb, wl)"

  'time_range_in_avg_below':߂̉ߋwlbԂ̓̃e[u̓J̕ϒlwlȉł
                            IvVł̕\L= -easyquery "time_range_in_avg_below(ΏTable, ΏColumn, ߂ߋwb, wl)"

  'time_range_in_value_multi_exist':̃e[u̓̃J̒ll߂̉ߋwbԈȓɎwloꂷ
                                    IvVł̕\L= -easyquery "time_range_in_value_multi_exist(ΏTable, ΏColumn, ߂ߋwb, w)"

  'last_range_avg_over':̃e[u̓̃J̒l̈莞ԑÖԂ̕ϒlƌ݂Ԃ̕ϒl׎w肵{݂̕ϒl傫𔻒
                        ݂2ƂꍇA24ԑO12܂ł̊Ԃ̂J̒l̕ϒlƌ݂12܂ł̊Ԃ̂J̒l̕ϒlׂČ݂̕24ԑO̕ϒl2{ɂȂĂCxgsȂǂɎg
                        L̏ꍇAw@͈ȉ̂悤ɂȂB([hAx[WtopR}hŗ-streamloadaveragetableƂOɂāAloadaverageƂJ-columnŎw肵zꍇ̑z
                        last_range_avg_over(loadaveragetable, loadaverage, 3600, 86400, 2) <=擪-streamŎw肵lAJA1`2\3600bA24ԑO\86400bA2{\2)
                        IvVł̕\L= -easyquery "last_range_avg_over(ΏTable, ΏColumn, w(b/P), 莞ԑO(b/P), w{)"

  [w]");
   -easyquery avg_over(pipe, column4, 3) 
   -easyquery avg_over(pipe, column4, parametertable:column1) <=p[^ɑ̃e[uɂJ̒lpꍇ
   ŎۂɎsĂSQL-debug onŊmF\


E-triggeryсA-queryA-easyquery𕡐w\ƂB
  w@͕-trigger-queryA-easyqueryw肷̂݁B
  擪-tirggersAw肵SĂ̏NAA-query or -easyquery悤
  擪sB
  [w]
  -trigger "column1 > 2" -trigger "column3 like test"


EHTTPT[o[hǉ
  HTTPvgRł̓͂󂯕tAHTTPT[o[hǉB
  ÕT[oHTTPʐMŃf[^𗬂ނƂ\ƂȂ܂B
  ftHgł̓|[gԍ8080ԂŋNĂ܂BReLXg͑SĂΏۂƂȂ܂B
  HTTPT[oɂJetty(http://jetty.codehaus.org/jetty/)𗘗pĂ܂B
  [Xsetsuna-0.0.3[XJetty7̍ŐVo[Wł7.6.3ŉғmFsĂ܂B
  ܂lib/jetty/zɃRpCAsɕKvJerttyjart@C𓯍Ă邪AɍŐV𗘗p邱Ƃ
  ܂BŐVłJettyɕύXărhۂbuild.xml"project.class.path"vfȂ̃pXύXĂB


  (N@) !!!! ]-jarwł̗p͂ł܂B
  $java -classpath ./:./setsuna.jar:./lib/jetty/* setsuna.core.SetsunaMain -httpserver true

  (f[^𗬂ރXNvgwgetŋLqꍇ)
  $wget "http://localhost:8080/?column1=00001&column2=data1&column3=type00001"

  L̓IvV̏ڂp@ƂȂ
  -httpserver:HTTPT[o[h̋Nw
              HTTPT[oŋNꍇ̓ftHg8080ԃ|[gHTTPvgRAdapter͂҂󂯂
              ҂󂯂ReLXg͎wȂ[gSĂΏۂƂȂB܂uhttp://setsunaexample.org/v̂悤Ɏw肷邱ƂɂȂ
              ҂󂯂ReLXgw肵ꍇ-httpcontextIvV𗘗p
              HTTPʐM1NGXg1f[^Ƃē͂\
              E͂HTTPp[^̃tH[}bgKey=ValueƂBKey̕Setsuna̓DB̃JƂȂA
                Value̓̕f[^ƂȂB-columnw肵Ăꍇ́Aw肵OHTTPp[^T邽߁A
                w肵Key΃p[^ꂸG[ƂȂB
                Getł̃NGXgɂƈȉ4̃Jf[^𓊓Ă
                http://setsunaexample.org/?column1=XXX1&column2=20120501120000&column3=testdata1&column4=exampledata1
              ͌AԋplHTTPXe[^XR[hƂȂAbody̕ԋp͂Ȃ
              EHTTPXe[^XR[h̑Ή͈ȉƂȂ
                200 : ͐
                400 : ̓f[^ŏSetsunaɓꂽꍇƓ̓p[^قȂB烁[^ɂΕ\
                500 : SetsunałȂ񂾂̃T[oG[ĂBNCAgɂ镜s
              -serverƓɎw肷-serverŋNMessagePack-RPCł̃T[oD悳ꂱ͋NȂ
              {[hŋNꍇ-queryŗpe[u-streamw肵ȂꍇA'server'Ƃe[uɂȂ
              **ȗ\**
              ȗꍇ̓pCv͂ƂȂ
              [w]
                -httpserver true
   
   
  -httpbindaddr:HTTPT[o[h̋ÑT[ooChAhX
                HTTPT[o[hŋNꍇ̂ݗL
                **ȗ\**
                ȗꍇ0.0.0.0ɃoCh
                [w]
                 -httpbindaddr 192.168.1.1
   
   
  -httpbindport:HTTPT[o[h̋ÑT[o҂󂯂|[gԍ
                RHELnOS̏ꍇArootӊOł80Ԃw肷邱Ƃ͏oȂꍇ邽ߒӂKvł
                HTTPT[o[hŋNꍇ̂ݗL
                **ȗ\**
                ȗꍇ8080ԂŋN
                [w]
                -httpbindport 9090
   
   
  -httpcontext:HTTPT[o[h̋ÑReLXg肵ꍇɗp
               HTTPT[o[hŋNꍇ̂ݗL
               **ȗ\**
               ȗꍇ͑SẴReLXg1͂ɂȂ
               [w]
               -httpcontext setsuna
                L̏ꍇ̓URL͈ȉƂȂ
                http://setsunaexample.org/setsuna


------------------------------------------------------------------------------------------------
[2012/03/24 - Version0.0.2 - [X]
̃[X@\͑S-helpłmFł܂B


ǉ@\[1]
  SetsunaNɃT[o[hŋNIvVǉ

  ȉ̋N@ŋN邱ƂŃT[o[hŋNA]̃pCvł͂Ȃ
  NetWorkzɃf[^𓊓邱Ƃ\łB

  (O)
  SetsunãT[o[h͓IMessagePack-RPCJavał𗘗pĂ܂B
  ̂߁ANɂMessagePack-RPCƂꂪˑ郉CuKvɂȂ܂B
  [X_ŗpCuzzlibfBNgzmsgpack̉ɑSēĂ܂B
  AŐV̊֘A郉Cuzz擾ėp邱Ƃ߂܂B

  [T[o̐]
   (N@) !!!! ]-jarwł̗p͂ł܂B
    java -classpath ./:./lib/msgpack/*:setsuna.jar setsuna.core.SetsunaMain -server true

    Linuxz 
    [XWJfBNgł̑z 
    ]̃pCv͂̏ꍇ͏]ʂ̋N@łB(java -jar setsuna.jar)
   (pNp[^
    E-server   :truew肷邱ƂŁAT[o[hŋN܂B
                 () -server true

    E-bindaddr :T[o[h̋ÑT[ooChAhX
                 ȗꍇ0.0.0.0AhXɃoh邱ƂɂȂ
                 () -bindaddr 192.168.1.1

    E-bindport :T[o[h̋ÑT[o҂󂯂|[gԍ
                 ȗꍇ10028ŋN邱ƂɂȂ
                 () -bindport 10222

   ()
    1."-server true"w肷邱ƂŃT[o[hɂȂNWT[o^ɂȂB
      쐬e[uw(-stream)ȗ"SERVER"Ƃe[uŃf[^x[Xɍ쐬܂B
    2.f[^𓊓镔ȊO͏]ƑSēp@łA-sepA-septA-dstIvV͖ɂȂ܂B
      J`ɊւĂ-columnwŃT[oNɌ肷邩ANCAgŏɑꂽf[^Ŏ쐬܂B

  [NCAg̐]
   (T[oɒ`Ă郁\bh)
    T[õf[^ɌĂяo\bh͈ȉ̂悤ɃT[oɒ`Ă܂B
    [`\bh]
     int next (String[] sendData)
      @  FSetsunaɓ1R[h̃f[^Columñf[^̔z
      @߂lFSetsuna̓o^ 0=o^A-9=J`Ƒꂽf[^z̐ȂG[A-9=T[oG[

   (Tv)
    ./test/ServerClientSamplezSetsunaServerModeClientSample.javaQlɂĂB



ǉ@\[2]
  Setsunag̃G[o͂t@Cɏo͂ł@\ǉ

  ]Setsuna͓ŔG[o͂SăR\[ɏo͂ĂAt@Cɏo͂@\łB
  NIvVɈȉw
  [IvV]
   -errorlog
  [w肷l]
   t@CpX
  [w]
   -errorlog "/var/log/setsuna_error.log"



ǉ@\[3]
  fobO[h̒ǉ

  AdapterAQueryAUserEventłǂ̂悤ȃCvbgf[^ATriggerAQueryAUserEventR}h
  Wo͂ɃvgAEg@\ǉ

  ꂼ̉ӏňȉ̂悤ȃtH[}bgŏo͂B
  [Adapter]
   pCv͎:"Debug : Fri Mar 23 23:40:53 JST 2012 - - Pipe Input=[͂ꂽf[^]"
   Server[h:"Debug : Fri Mar 23 23:37:20 JST 2012 - - Server Input=[[0]="Mꂽf[^z1Ԗڂ̃f[^",[1]="Mꂽf[^z2Ԗڂ̃f[^"EEEȍ~]"
  [Query]
   -trigger : "Debug : Fri Mar 23 23:45:06 JST 2012 - - -trigger Query=[̓f[^ ؋L [Uwl]"
              () Debug : Fri Mar 23 23:45:06 JST 2012 - - -trigger Query=[=32 > 100]
   -query : "Debug : Fri Mar 23 23:47:35 JST 2012 - - -query SQL=[w肵SQL]"
  [UserEvent]
   -event : "Debug : Fri Mar 23 23:52:58 JST 2012 - - -event=[sꂽR}h]"
   -eventquery: "Debug : Fri Mar 23 23:54:01 JST 2012 - - -eventquery=[sꂽSQL]"

  fobO[hɂ2ރ[h݂A
  1̓fobOSetsuna̕Wo(f[^Ȃ)݃[h
  fobÔݏo͂郂[hB

  NIvVɈȉw
  [IvV]
   -debug
  [w肷l]
   on       ()
   only     (fobÔ)
  [w]
   -debug on
   -debug only



ǉ@\[4]
  ̓f[^ǂݍ݊Jnʒu̐ݒ@\

  W̓[hAT[o[hɑ荞܂ꂽf[^w肳ꂽf[^;
  XLbv(ǂݍ܂Ȃ)Ă珉߂ēDBւ̊i[Jn@\

  pC[W͓ǂݍ܂f[^̍ŏ̃R[hɋ󔒂A{ǂݍ݂
  f[^ƈقȂtH[}bg݂ꍇɗpB
  ̃IvV𗘗pꍇ͕K-columnIvVݒ肷Kv
  ̓f[^i[e[u`쐬Kv邽߂ł

  NIvVɈȉw
  [IvV]
   -offset
  [w肷l]
   l (荞݂JnR[hw)
  [w]
   -offset 3 -column "col1 col2 col3"
   L̏ꍇApCvȂǂő荞܂ꂽf[^3R[hڂ珉߂Ď荞܂ꂾB
     A-columnwKݒ肷Kv



ǉ@\[5]
  J`ƈقȂtH[}bg̃f[^͂ꂽꍇɖĎ荞܂Ȃ@\

  ]̓J`ƈقȂf[^͂ꂽꍇA荞܂ꂸException
  sĂA̋@\𗘗p邱Ƃł̓f[^XLbv悤ɂȂ

  Ⴆ΃J`ASetsuna荞1R[hڂȉ̃tH[}bg̏ꍇ
  
   "XXXXX YYYYY ZZZZZ"                    
  
  J3ƂȂB̏Ԃœ̓f[^2R[hڈȍ~Ɉȉ̂悤ȃf[^͂
  
   "AAAAA BBBBB"                          
  
  1R[hڂ̃Jɑ΂ĈقȂ邽ExceptionsSetsunaIĂB
  ꍇɖ{@\gƈقȂf[^͎荞܂ȂȂB

  NIvVɈȉw
  [IvV]
   -skiperror
  [w肷l]
   true
  [w]
   -skiperror true

